Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 vector-feature-night-mode-enabled skin-theme-clientpref-os vector-sticky-header-enabled" lang="fr" dir="ltr"><head>
<meta charset="UTF-8">
<title>Java Card</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://fr.wikipedia.org/wiki/Java_Card"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Java_Card rootpage-Java_Card skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Java Card</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="fr" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="fr" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r223479407">
/* start https://fr.wikipedia.org/ */


.mw-parser-output .encadre{float:right;width:14em;min-width:min-content;padding:.5em .9em 0 .9em;margin-left:0.5em;margin-bottom:0.5em;border:solid 1px #99B3FF;background-color:var(--background-color-base,#fff)}.mw-parser-output .encadre-entete{display:flex;align-items:center;justify-content:center;gap:1em}.mw-parser-output .encadre-titre{font-weight:bold}.mw-parser-output .encadre-reference{text-align:center;font-size:.8em}@media screen{html.skin-theme-clientpref-night .mw-parser-output .encadre{border-color:#164e76}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .encadre{border-color:#164e76}}


/* end https://fr.wikipedia.org/ */
</style>
<div class="encadre notheme" style="background-color:#e4e4e440;">
<div class="encadre-entete">
<div class="encadre-titre"></div></div>
<div class="encadre-contenu">


<div class="mw-heading mw-heading3"><h3 id="Plateforme_Java"><div class="center"><a href="Plateforme_Java" title="Plateforme Java">Plateforme Java</a></div></h3></div>
<ul><li><a href="Java_SE" title="Java SE">Java SE</a></li>
<li><a href="Jakarta_EE" title="Jakarta EE">Jakarta EE</a></li>
<li><a href="Java_ME" title="Java ME">Java ME</a></li>
<li><a href="JavaFX" title="JavaFX">JavaFX</a></li>
<li><b>Java Card</b></li></ul>
</div>
</div>
<p><b>Java Card</b> est un <a href="Syst%C3%A8me_d'exploitation_pour_carte_%C3%A0_puce" title="Système d'exploitation pour carte à puce">système d'exploitation pour carte à puce</a> qui fournit essentiellement un <a href="Environnement_d'ex%C3%A9cution" title="Environnement d'exécution">environnement d'exécution</a> pour un sous-ensemble du langage <a href="Java_(langage)" title="Java (langage)">Java</a> spécifiquement destiné aux applications pour <a href="Carte_%C3%A0_puce" title="Carte à puce">carte à puce</a>. Java Card permet l'exécution d'applications au sein des cartes à puce, qui offrent des capacités de mémoire et de traitement limitées. De multiples applications peuvent être déployées avant et même après que la <a href="Carte_%C3%A0_puce" title="Carte à puce">carte à puce</a> a été fournie à l'utilisateur final. Les applications écrites dans le <a href="Langage_de_programmation" title="Langage de programmation">langage de programmation</a> Java peuvent être exécutées en toute sécurité sur l’ensemble des types de cartes disponibles sur le marché.
</p>
<div class="mw-heading mw-heading2"><h2 id="Historique">Historique</h2></div>
<p>En 1996, les ingénieurs de la division carte de <a href="Schlumberger_(entreprise)" class="mw-redirect" title="Schlumberger (entreprise)">Schlumberger</a><sup id="cite_ref-havsp_Baentsch_p37_1-0" class="reference"><a href="#cite_note-havsp_Baentsch_p37-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> au <a href="Texas" title="Texas">Texas</a> (qui a fusionné plus tard avec <a href="Gemplus_international" class="mw-redirect" title="Gemplus international">Gemplus international</a> pour former <a href="Gemalto" class="mw-redirect" title="Gemalto">Gemalto</a>) ont souhaité simplifier la programmation des cartes à puces tout en préservant la <a href="S%C3%A9curit%C3%A9_des_donn%C3%A9es" title="Sécurité des données">sécurité des données</a> dans le respect de la norme ISO 7816.
</p><p>La solution retenue fut le langage de programmation <a href="Java_(langage)" title="Java (langage)">Java</a>. En raison de la faible capacité mémoire disponible sur une <a href="Carte_%C3%A0_puce" title="Carte à puce">Carte à puce</a> seulement un sous-ensemble de <a href="Java_(langage)" title="Java (langage)">Java</a> pouvait être utilisé. Ainsi fut créé Java Card 1.0 en <time class="nowrap" datetime="1996-11" data-sort-value="1996-11">novembre 1996</time>, le premier langage orienté objet adapté aux cartes à puce.
</p><p><time class="nowrap" datetime="1997-02" data-sort-value="1997-02">Février 1997</time>, <a href="Schlumberger_(entreprise)" class="mw-redirect" title="Schlumberger (entreprise)">Schlumberger</a> et <a href="Gemplus" title="Gemplus">Gemplus</a> fondent Java Card Forum qui recommande des spécifications à JavaSoft (la division de Sun à qui appartient Java Card) en vue d'obtenir une standardisation du langage et promeut les APIs de Java Card pour qu'elle devienne la plate-forme standard de développement des applications pour les <a href="Cartes_%C3%A0_puce" class="mw-redirect" title="Cartes à puce">cartes à puce</a><sup id="cite_ref-havsp_Baentsch_p37_1-1" class="reference"><a href="#cite_note-havsp_Baentsch_p37-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>.
</p><p><time class="nowrap" datetime="1997-11" data-sort-value="1997-11">Novembre 1997</time>, les producteurs de Cartes à puce comme <a href="De_La_Rue" title="De La Rue">De La Rue</a>, <a href="Bull_(entreprise)" title="Bull (entreprise)">Bull</a>
, <a href="Giesecke_%26_Devrient" class="mw-redirect" title="Giesecke &amp; Devrient">Giesecke &amp; Devrient(G&amp;D)</a> rejoignent Java Card Forum qui édite une nouvelle version de spécifications Java Card 2.0<sup id="cite_ref-havsp_Baentsch_p37_1-2" class="reference"><a href="#cite_note-havsp_Baentsch_p37-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>.
</p><p>Par la suite, Sun éditera alors quatre nouvelles spécifications&nbsp;: en <time class="nowrap" datetime="1999-03" data-sort-value="1999-03">mars 1999</time> édition de Java Card 2.1<sup id="cite_ref-havsp_Baentsch_p37_1-3" class="reference"><a href="#cite_note-havsp_Baentsch_p37-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>, en <time class="nowrap" datetime="2002-06" data-sort-value="2002-06">juin 2002</time> Java Card 2.2, en <time class="nowrap" datetime="2008-03" data-sort-value="2008-03">mars 2008</time> Java Card 3.0 et enfin la plus récente Java Card 3.0.1 en <time class="nowrap" datetime="2009-05" data-sort-value="2009-05">mai 2009</time><sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>.
</p><p>La société <a href="Oracle_Corporation" class="mw-redirect" title="Oracle Corporation">Oracle Corporation</a> acquiert en <time class="nowrap" datetime="2010-01" data-sort-value="2010-01">janvier 2010</time> l'entreprise <a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Architecture">Architecture</h2></div>
<p>La carte à puce représente une des plates-formes informatiques les plus réduites<sup id="cite_ref-Chen2000_29_3-0" class="reference"><a href="#cite_note-Chen2000_29-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>. Le plus grand défi de conception de la technologie de Java Card est d'embarquer le logiciel de base <a href="Java_(langage)" title="Java (langage)">Java</a> dans une <a href="Carte_%C3%A0_puce" title="Carte à puce">carte à puce</a> en conservant l'espace mémoire nécessaire pour stocker des applications. La solution retenue par Sun, issue des travaux de Schlumberger<sup id="cite_ref-havsp_Baentsch_p37_1-4" class="reference"><a href="#cite_note-havsp_Baentsch_p37-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>, est d’implémenter un sous-ensemble des fonctionnalités du langage <a href="Java_(langage)" title="Java (langage)">Java</a> et d’appliquer un modèle réduit de la JVM (<i>Java Virtual Machine</i>) appelé JCVM (<i>Java Card Virtual Machine</i>)<sup id="cite_ref-Chen2000_29_3-1" class="reference"><a href="#cite_note-Chen2000_29-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>.
En plus de fournir le support de langage <a href="Java_(langage)" title="Java (langage)">Java</a>, la technologie de Java Card définit un environnement d'exécution en temps réel qui supporte la mémoire, la communication, la sécurité et le modèle d'exécution de l’application. Cet environnement respecte la norme standard ISO7816<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>.
</p>

<p>La plate-forme Java Card est articulée autour<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>&nbsp;:
</p>
<ul><li>d’une <a href="Machine_virtuelle_Java" title="Machine virtuelle Java">machine virtuelle Java</a> Card appelée JCVM<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>note 1<span class="cite-bracket">]</span></a></sup> dont les spécifications définissent les fonctionnalités mises en œuvre par la technologie Java Card. Elles incluent le jeu d'instruction de la Machine Virtuelle Java Card, un sous-ensemble du langage <a href="Java_(langage)" title="Java (langage)">Java</a> et les formats de fichier utilisés pour installer des applets et des bibliothèques dans des cartes à puce ou autres périphériques qui hébergent la technologie de Java Card<sup id="cite_ref-Chen2000_30_7-0" class="reference"><a href="#cite_note-Chen2000_30-7"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>.</li>
<li>d’un environnement d’exécution Java Card appelé JCRE<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>note 2<span class="cite-bracket">]</span></a></sup> constitué de composants systèmes. La JCRE est responsable de la gestion des ressources des cartes à puces, des communications réseaux, de l'exécution ainsi que la sécurité des Applets. La JCRE sert de système d'exploitation de la carte à puce, celui-ci s'appuie sur la couche matérielle de carte à puce et du système natif<sup id="cite_ref-Chen2000_30_7-1" class="reference"><a href="#cite_note-Chen2000_30-7"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>.</li>
<li>d’un ensemble de librairies accessibles APIs<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>note 3<span class="cite-bracket">]</span></a></sup>, un sous ensemble du JCRE, contenant les définitions de classe requises pour supporter la JVCM et la JCRE. Il décrit les fonctions de bases utiles pour programmer des applications de cartes à puce<sup id="cite_ref-Chen2000_30_7-2" class="reference"><a href="#cite_note-Chen2000_30-7"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>.</li></ul>
<p>La caractéristique la plus significative du JCRE est qu'il fournit une séparation claire entre le système et les applications<sup id="cite_ref-Chen2000_30_7-3" class="reference"><a href="#cite_note-Chen2000_30-7"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>.
La technologie de Java Card définit une plate-forme sur laquelle les applications écrites dans le langage de programmation <a href="Java_(langage)" title="Java (langage)">Java</a> peuvent fonctionner sur carte à puce et autres périphériques avec mémoire<sup id="cite_ref-Chen2000_30_7-4" class="reference"><a href="#cite_note-Chen2000_30-7"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>.
Les applications Java Card sont vues comme des <a href="Applet_Java" title="Applet Java">applets</a><sup id="cite_ref-Chen2000_30_7-5" class="reference"><a href="#cite_note-Chen2000_30-7"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> ou des <a href="Servlet" title="Servlet">servlets</a><sup id="cite_ref-havsp_Sun_White_Paper_7_10-0" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_7-10"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>.
</p><p>À partir de la version 3.0, éditée par Sun en <time class="nowrap" datetime="2008-03" data-sort-value="2008-03">mars 2008</time>, à la suite des évolutions des cartes à puces, la plate-forme Java Card se décline en 2 versions<sup id="cite_ref-havsp_Sun_White_Paper_1_11-0" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_1-11"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>.
</p>
<dl><dt>Version Classique <sup id="cite_ref-havsp_Sun_White_Paper_2_12-0" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_2-12"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup></dt>
<dd>Cette version est une évolution de la version 2.2 et cible les systèmes limités en ressources et qui supportent les applications basées sur les Applets. Elle apporte des correctifs et offre l’exploitation de nouveaux algorithmes de sécurité (Exemple support des clés RSA 4096 bits). De plus, un ajustement avec les récents standards des cartes «sans contact» a été réalisé.</dd></dl>
<dl><dt>Version Connectée <sup id="cite_ref-havsp_Sun_White_Paper_2_12-1" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_2-12"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup></dt>
<dd>Cette version apporte un environnement amélioré d’exécution et une nouvelle machine virtuelle. Une nouvelle architecture a été conçue pour transformer la carte à puce en élément sécurisé de réseau. La carte à puce peut alors fournir des services réseaux IP tels que <a href="Serveur_web" title="Serveur web">serveur web</a> HTTP, serveur web sécurisé HTTPS, identification, accès aux ressources d'un réseau. Cette version cible des produits moins limités en ressources incluant de nouvelles fonctionnalités orientées réseau telles que les <a href="Application_web" title="Application web">applications web</a>, appelées <a href="Servlet" title="Servlet">servlet</a>. Cette version intègre les fonctionnalités de la version classique.</dd></dl>

<div class="mw-heading mw-heading3"><h3 id="Version_Java_Card_2.x_et_Java_Card_3_«_classique_»"><span id="Version_Java_Card_2.x_et_Java_Card_3_.C2.AB_classique_.C2.BB"></span>Version Java Card 2.x et Java Card 3 «&nbsp;classique&nbsp;»</h3></div>
<p>Java Card est donc l'adaptation de la technologie <a href="Java_(technique)" title="Java (technique)">Java</a> pour les <a href="Cartes_%C3%A0_puce" class="mw-redirect" title="Cartes à puce">cartes à puce</a>. Les <a href="Applet_Java" title="Applet Java">applets</a> sont développées dans le langage <a href="Java_(langage)" title="Java (langage)">Java</a>, elles sont ensuite transformées afin de satisfaire les contraintes de mémoire, puis sont chargées dans la carte<sup id="cite_ref-Chen2000_29_3-2" class="reference"><a href="#cite_note-Chen2000_29-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>. Une fois installé sur la plate-forme et sélectionné, le <a href="Bytecode_Java" title="Bytecode Java"><i>bytecode</i></a><sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>note 4<span class="cite-bracket">]</span></a></sup>, de l'applet est exécuté par la machine virtuelle embarquée JCVM<sup id="cite_ref-Chen2000_34_14-0" class="reference"><a href="#cite_note-Chen2000_34-14"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup>.
</p>
<div class="mw-heading mw-heading4"><h4 id="Machine_Virtuelle_Java_Card">Machine Virtuelle Java Card</h4></div>
<p>La JCVM exécute le <a href="Bytecode_Java" title="Bytecode Java"><i>bytecode</i></a>, contrôle l'attribution de la mémoire, gère les objets et met en application la sécurité pendant l'exécution. La capacité des cartes à puces étant trop limité pour contenir toutes les informations des fichiers de classe Java, vérificateur de <a href="Code_objet" title="Code objet">code objet</a>, la JVCM est donc implémentée en deux parties distinctes (principale différence entre la JVM et la JCVM)<sup id="cite_ref-Chen2000_31_15-0" class="reference"><a href="#cite_note-Chen2000_31-15"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup>&nbsp;:
</p>
<ul><li>Une partie externe à la <a href="Carte_%C3%A0_puce" title="Carte à puce">carte à puce</a><sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>note 5<span class="cite-bracket">]</span></a></sup>, intégrant le convertisseur et vérificateur fonctionnant sur un <a href="Ordinateur_personnel" title="Ordinateur personnel">PC</a><sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>note 6<span class="cite-bracket">]</span></a></sup> ou un poste de travail distant<sup id="cite_ref-Chen2000_31_15-1" class="reference"><a href="#cite_note-Chen2000_31-15"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup>.</li>
<li>Une partie interne à la <a href="Carte_%C3%A0_puce" title="Carte à puce">carte à puce</a><sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>note 7<span class="cite-bracket">]</span></a></sup> c'est-à-dire présente sur la carte qui inclut l’interpréteur de code Java Card<sup id="cite_ref-Chen2000_31_15-2" class="reference"><a href="#cite_note-Chen2000_31-15"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup>.</li></ul>

<p>Ensemble, ils implémentent le chargement des fichiers de classe Java par l’intermédiaire du vérificateur et convertisseur pour enfin exécuter l'applet à l'aide de l’interpréteur.
</p>
<dl><dt>le vérificateur<sup id="cite_ref-havsp_Oracle_1_19-0" class="reference"><a href="#cite_note-havsp_Oracle_1-19"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup></dt>
<dd>examine un ou plusieurs fichiers de classe contenant le <a href="Bytecode_Java" title="Bytecode Java"><i>bytecode</i></a>, pour assurer qu'il respecte la syntaxe et les règles du langage et vérifie statiquement que les flux de contrôle et de données ne produiront pas d'erreur lors de l’exécution<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup>.</dd></dl>
<dl><dt>le convertisseur</dt>
<dd>charge les fichiers de classe vérifiés par le vérificateur. Il produit un fichier CAP<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>note 8<span class="cite-bracket">]</span></a></sup>, (contenant une représentation compacte d'un ou plusieurs fichiers Java compilés) correspondant à la conversion d’une applet<sup id="cite_ref-Chen2000_32_22-0" class="reference"><a href="#cite_note-Chen2000_32-22"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup>.</dd></dl>
<p>En plus de la création d'un fichier CAP, le convertisseur produit un fichier d'exportation<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">[</span>note 9<span class="cite-bracket">]</span></a></sup> contenant des informations API publiques pour un ou plusieurs fichiers de classe<sup id="cite_ref-Chen2000_33_24-0" class="reference"><a href="#cite_note-Chen2000_33-24"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup>.
Il définit le niveau d'accès et le nom d'une classe ainsi que le niveau d'accès et les signatures des méthodes et champs de la classe. Un fichier d'exportation contient aussi des informations utilisées pour résoudre des jonctions de référence entre différentes applets sur la carte<sup id="cite_ref-Chen2000_34_14-1" class="reference"><a href="#cite_note-Chen2000_34-14"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup>.
</p><p>L’interpréteur de Java Card fournit le support d'exécution du langage Java, il exécute les tâches suivantes<sup id="cite_ref-Chen2000_35_25-0" class="reference"><a href="#cite_note-Chen2000_35-25"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup>&nbsp;:
</p>
<ul><li>exécute des instructions de code des <a href="Applet_Java" title="Applet Java">applets</a>&nbsp;;</li>
<li>contrôle la création d'objet et l'attribution de mémoire&nbsp;;</li>
<li>joue un rôle crucial dans l'assurance de la sécurité pendant l'exécution.</li></ul>

<p>L’interpréteur de Java Card ne charge pas de fichier de classe ou fichier CAP, il en exécute seulement le code<sup id="cite_ref-Chen2000_35_25-1" class="reference"><a href="#cite_note-Chen2000_35-25"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup>. Dans la technologie de Java Card, les mécanismes de téléchargement et d'installation sont inclus dans une unité appelée l'installateur résidant dans la carte à puce<sup id="cite_ref-Chen2000_35_25-2" class="reference"><a href="#cite_note-Chen2000_35-25"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup>. Il coopère avec un programme d'installation non-implémenté sur la carte. Le programme d'installation transmet le(s) fichier(s) à l'installateur sur la carte via un dispositif d'acceptation de carte (CAD<sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">[</span>note 10<span class="cite-bracket">]</span></a></sup>). L'installateur écrit le(s) fichier(s) dans la mémoire de carte à puce pour être lu avec les autres classes qui sont déjà embarquées sur la carte. Il crée et initialise les structures de données qui sont utilisées par la JCRE.
</p>
<div class="mw-heading mw-heading4"><h4 id="Environnement_d'exécution_Java_Card"><span id="Environnement_d.27ex.C3.A9cution_Java_Card"></span>Environnement d'exécution Java Card</h4></div>
<p>Le JCRE est responsable de la gestion des ressources de la carte, des communications réseaux, de l'exécution et la sécurité des applets<sup id="cite_ref-Chen2000_36_27-0" class="reference"><a href="#cite_note-Chen2000_36-27"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup>. Il est implémenté sur la carte à puce et sert essentiellement au système d'exploitation présent sur la carte<sup id="cite_ref-Chen2000_36_27-1" class="reference"><a href="#cite_note-Chen2000_36-27"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup>.
Le JCRE est composé de la JCVM, des APIs, d'extensions spécifiques à une industrie<sup id="cite_ref-28" class="reference"><a href="#cite_note-28"><span class="cite-bracket">[</span>note 11<span class="cite-bracket">]</span></a></sup>. et des systèmes de classes<sup id="cite_ref-Chen2000_36_27-2" class="reference"><a href="#cite_note-Chen2000_36-27"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup>.
</p>

<p>Le JCRE distingue les applets des propriétés techniques de la carte à puce. Il fournit le système standard et les APIs pour les applets. Celles-ci sont donc plus simples à écrire et sont donc facilement portables sur différentes architectures de cartes à puce<sup id="cite_ref-Chen2000_36_27-3" class="reference"><a href="#cite_note-Chen2000_36-27"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup>.
</p><p>La couche inférieure du JCRE contient la JCVM et les méthodes natives<sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span class="cite-bracket">[</span>note 12<span class="cite-bracket">]</span></a></sup>. Elles fournissent le support à la JCVM et le système de classes pour la couche suivante.
Le système de classes cadre le fonctionnement du JCRE<sup id="cite_ref-Chen2000_37_30-0" class="reference"><a href="#cite_note-Chen2000_37-30"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> et son rôle est similaire à un système d'exploitation. Il est responsable&nbsp;:
</p>
<dl><dt>de la gestion des transactions</dt>
<dd>mécanisme permettant de rendre un ensemble d’opérations atomiques (ex&nbsp;: transaction bancaire)<sup id="cite_ref-Dufay_2003_p28_31-0" class="reference"><a href="#cite_note-Dufay_2003_p28-31"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup>.</dd>
<dt>des communications avec le serveur CAD</dt>
<dd>La gestion des communications d'Applets, se fait via l’<a href="Application_Protocol_Data_Unit" title="Application Protocol Data Unit">Application Protocol Data Unit</a> (APDU)s dont la structure est définie par la norme ISO 7816<sup id="cite_ref-Dufay_2003_p28_31-1" class="reference"><a href="#cite_note-Dufay_2003_p28-31"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup>.</dd>
<dt>du cycle de vie des applets</dt>
<dd>Le JCRE initialise l'<a href="Applet" title="Applet">applet</a> après son installation. Il peut sélectionner alors l'<a href="Applet" title="Applet">applet</a> pour lui signifier de s’exécuter, la dé sélectionner ou lui transmettre un signal APDU<sup id="cite_ref-Dufay_2003_p28_31-2" class="reference"><a href="#cite_note-Dufay_2003_p28-31"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup>.</dd></dl>
<p>Le système de classes invoque les méthodes natives<sup id="cite_ref-Chen2000_38_32-0" class="reference"><a href="#cite_note-Chen2000_38-32"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup>. Elles contiennent un ensemble de fonctions bas niveau qui permettent au JCRE de gérer les ressources physiques de la carte telles que les <a href="Entr%C3%A9es-sorties" class="mw-redirect" title="Entrées-sorties">entrées-sorties</a>, la gestion de la mémoire ou le coprocesseur cryptographique. Ces méthodes sont compilées en code exécutable dédié au processeur de la carte<sup id="cite_ref-Chen2000_36_27-4" class="reference"><a href="#cite_note-Chen2000_36-27"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup>.
</p><p>La structure de classes API définit les interfaces de programmation d'application, <a href="Interface_de_programmation" title="Interface de programmation">API</a><sup id="cite_ref-Chen2000_37_30-1" class="reference"><a href="#cite_note-Chen2000_37-30"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup>. L'avantage majeur est qu'elle rend plus facile la création d'<a href="Applet" title="Applet">applet</a>. Les développeurs d'<a href="Applet" title="Applet">applet</a> peuvent concentrer leurs efforts sur la programmation vis-à-vis des contraintes de l'infrastructure de système de carte à puce grâce aux extensions d'API disponibles<sup id="cite_ref-Chen2000_38_32-1" class="reference"><a href="#cite_note-Chen2000_38-32"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup>. Les applets ont accès aux services JCRE par des classes API.
</p><p>La structure extension spécifique à une industrie fournit les bibliothèques complémentaires de services supplémentaires ou des modèles de système et de sécurité (ex&nbsp;: industries financières)<sup id="cite_ref-Chen2000_37_30-2" class="reference"><a href="#cite_note-Chen2000_37-30"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup>.
</p><p>L'installateur permet le téléchargement sécurisé de logiciels et d’<a href="Applet" title="Applet">applets</a> sur la carte après que la carte a été produite et fournie à l'utilisateur<sup id="cite_ref-Chen2000_37_30-3" class="reference"><a href="#cite_note-Chen2000_37-30"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup>. L'installateur interne coopère avec l'installateur externe à la carte. Ensemble, ils accomplissent la tâche de charger le contenu binaire du fichier CAP ou fichier de(s) classe(s). Cependant, l'installateur est un composant JCRE facultatif, mais sans lui tous logiciels de carte, y compris les <a href="Applet" title="Applet">applets</a>, devraient être écrits dans la mémoire de la carte pendant le procédé de fabrication<sup id="cite_ref-Chen2000_36_27-5" class="reference"><a href="#cite_note-Chen2000_36-27"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup>.
</p>
<div class="mw-heading mw-heading4"><h4 id="API">API</h4></div>
<p>L’interface de programmation d'application <a href="Interface_de_programmation" title="Interface de programmation">API</a> disponible permet de développer des applications et fournir des services à ces applications<sup id="cite_ref-33" class="reference"><a href="#cite_note-33"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup>&nbsp;:
Ces classes définissent les conventions selon lesquelles une Applet Java Card a accès au JCRE et aux fonctions natales, y compris la fonction de système d'exploitation, l'accès à la mémoire et les opérations d'entrée-sortie. Les API utilisées par la carte sont&nbsp;:
</p>
<dl><dt>java.io</dt>
<dd>est un sous-ensemble du paquet java.io dans le langage de programmation <a href="Java_(langage)" title="Java (langage)">Java</a> standard.</dd>
<dt>Java.lang</dt>
<dd>fournit les fondamentaux pour la conception du sous-ensemble de technologie de Java Card du langage de programmation <a href="Java_(langage)" title="Java (langage)">Java</a>. Les classes fournies sont tirées de java.lang dans le langage de programmation Java standard et représentent la fonction principale requise par la JVCM. Cette fonction principale est représentée par la classe d'Objet, qui est la super-classe pour toutes les classes de langage <a href="Java_(langage)" title="Java (langage)">Java</a> et la classe <i>Exception</i>, qui est la super-classe pour l'exception et les classes d'exception pendant l'exécution.</dd>
<dt>Java.rmi</dt>
<dd>définit l'interface à distance qui identifie les interfaces dont les méthodes peuvent être invoquées du périphérique de réception de carte (CAD) des applications client.</dd>
<dt>Javacard.framework</dt>
<dd>fournit une structure de classes et des interfaces pour la conception et la communication des applets, contient les fonctionnalités essentielles de fonctionnement avec Java Card.</dd>
<dt>Javacard.framework.service</dt>
<dd>fournit une structure de services de classes et d’interfaces qui permettent à une Applet de Java Card d'être conçue comme une liste de composants de services.</dd>
<dt>Javacard.security</dt>
<dd>fournit les classes et les interfaces qui contiennent la fonction disponible pour implémenter une sécurité et une structure de <a href="Cryptographie" title="Cryptographie">cryptographie</a> sur la Java Card. Les classes du paquet Javacard.security fournissent les définitions des algorithmes qui exécutent cette sécurité et les fonctions de cryptographie<sup id="cite_ref-SUN_API_34-0" class="reference"><a href="#cite_note-SUN_API-34"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup>
<dl><dd><ol><li>Mises en œuvre de clés de chiffrement différentes par la classe KeyBuilder&nbsp;;</li>
<li>Hachage des données par la classe MessageDigest&nbsp;;</li>
<li>Génération de données aléatoires par la classe RandomData&nbsp;;</li>
<li>Signature par la classe Signature&nbsp;;</li>
<li>Échanges de <a href="Cl%C3%A9_de_session" title="Clé de session">clé de session</a> par la classe KeyAgreement.</li></ol></dd></dl></dd></dl>
<dl><dt>Javacardx.crypto</dt>
<dd>contient la fonction qui implémente la sécurité et la structure de cryptographie sur la Java Card. C'est une extension du paquet précédent. Il contient la classe Cipher et l'interface KeyEncryption. Cipher est une classe qui fournit des méthodes pour chiffrer et déchiffrer des messages<sup id="cite_ref-havsp_Ghindici_6_35-0" class="reference"><a href="#cite_note-havsp_Ghindici_6-35"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup>. KeyEncryption est une interface qui fournit la fonction qui permet aux clés d'être mises à jour d'une façon continue sécurisée.</dd></dl>
<div class="mw-heading mw-heading3"><h3 id="Version_Java_Card_3_«_Connectée_»"><span id="Version_Java_Card_3_.C2.AB_Connect.C3.A9e_.C2.BB"></span>Version Java Card 3 «&nbsp;Connectée&nbsp;»</h3></div>
<p>La version 3 «&nbsp;Connectée&nbsp;» des spécifications de la plateforme Java Card présente des différences profondes avec les autres versions existantes.
</p><p>Tout d'abord, alors que les versions antérieures ne pouvaient charger que des <a href="Fichier_binaire" title="Fichier binaire">fichiers binaires</a> spécifiques (les fichiers CAP), les applications Java Card 3 «&nbsp;Connectées&nbsp;» sont déployées sous forme de fichiers java compilés de façon conventionnelle (des fichiers <code>.class</code>) regroupés dans des fichiers <code>.jar</code>, à l'instar des machines virtuelles java conventionnelles<sup id="cite_ref-havsp_Sun_White_Paper_5_36-0" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_5-36"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup>. Il n'est alors plus nécessaire d'avoir recours à des outils de conversions de code.
</p><p>Par ailleurs Java Card 3 «&nbsp;Connectée&nbsp;» privilégie le mode de communication de l'internet&nbsp;: les <a href="Internet_Protocol" title="Internet Protocol">protocoles internet</a> via norme IP ISO 7816-4 pour les interfaces «&nbsp;avec contacts&nbsp;». La norme ISO 14443 est elle utilisée pour les interfaces «sans contact»<sup id="cite_ref-havsp_Sun_White_Paper_2_12-2" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_2-12"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>. Les applications Java Card 3 «&nbsp;Connectées&nbsp;» sont en fait, des <a href="Servlet" title="Servlet">Servlets</a>, c'est-à-dire de véritables <a href="Service_Web" class="mw-redirect" title="Service Web">Services Web</a>, qui respectent, à ce titre, le protocole <a href="Hypertext_Transfer_Protocol" title="Hypertext Transfer Protocol">HTTP</a>.
</p><p>La machine virtuelle Java Card 3 est basée sur le CLDC<sup id="cite_ref-37" class="reference"><a href="#cite_note-37"><span class="cite-bracket">[</span>note 13<span class="cite-bracket">]</span></a></sup> largement utilisé dans le monde de la téléphonie mobile<sup id="cite_ref-38" class="reference"><a href="#cite_note-38"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup>. Cette plate-forme donne accès aux fonctionnalités les plus riches du langage JAVA<sup id="cite_ref-havsp_Sun_White_Paper_2_12-3" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_2-12"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>. La plate-forme CLDC a été réduite en taille, les protocoles et les systèmes sécurités de cartes à puce ont été intégrés<sup id="cite_ref-havsp_Sun_White_Paper_2_12-4" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_2-12"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>.
</p><p>Évolution des périphériques supportant la technologie Java Card<sup id="cite_ref-havsp_Sun_White_Paper_4_39-0" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_4-39"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup>
</p>

<table class="wikitable">

<tbody><tr>
<th>Carte à puce traditionnelle</th>
<th>Carte à puce récente compatible V3
</th></tr>
<tr>
<td>8/16-bit CPU</td>
<td>32-bit CPU
</td></tr>
<tr>
<td>2 kb RAM</td>
<td>24 kb RAM
</td></tr>
<tr>
<td>48 kb - 64 kb ROM</td>
<td>&gt;256 kb ROM
</td></tr>
<tr>
<td>8–32 kb EEPROM</td>
<td>&gt;128 kb EEPROM
</td></tr>
<tr>
<td>Serial I/O interface</td>
<td>High-speed interfaces
</td></tr>
<tr>
<td>9,6 kb/s - 30 kb/s</td>
<td>1,5 Mb/s - 12 Mb/s
</td></tr>
<tr>
<td>Full duplex</td>
<td>Half duplex
</td></tr></tbody></table>
<p><b>Amélioration apportée par la version 3 connectée</b><sup id="cite_ref-havsp_Sun_White_Paper_5_36-1" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_5-36"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup>.
</p>
<ul><li>Applications de type <a href="Servlet" title="Servlet">servlets</a><sup id="cite_ref-havsp_Sun_White_Paper_5_36-2" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_5-36"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup>.</li>
<li>Gestion de multitâches (Multithreading)<sup id="cite_ref-havsp_Sun_White_Paper_5_36-3" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_5-36"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup>.</li>
<li>Vérification par byte code interne<sup id="cite_ref-havsp_Sun_White_Paper_5_36-4" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_5-36"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup>(Vérification de.class par la machine virtuelle interne).</li>
<li>Ramasse Miette automatique (Garbage collector) inclut dans la machine virtuelle<sup id="cite_ref-havsp_Sun_White_Paper_5_36-5" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_5-36"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup>.</li>
<li>Ajout des types Char, Long et String<sup id="cite_ref-havsp_Sun_White_Paper_5_36-6" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_5-36"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup>.</li>
<li>Tableau multidimensionnel<sup id="cite_ref-havsp_Sun_White_Paper_6_40-0" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_6-40"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup>.</li>
<li>Classe représentant les types primitifs (Boolean, Integer,…)<sup id="cite_ref-havsp_Sun_White_Paper_6_40-1" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_6-40"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup><sup class="reference cite_virgule">,</sup><sup id="cite_ref-41" class="reference"><a href="#cite_note-41"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup></li>
<li>Classe de la manipulation de Chaines de caractères (StringBuilder…)<sup id="cite_ref-havsp_Sun_White_Paper_6_40-2" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_6-40"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup><sup class="reference cite_virgule">,</sup><sup id="cite_ref-42" class="reference"><a href="#cite_note-42"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup>.</li>
<li>Classe pour la gestion des Entrées/Sorties (Reader, Writer et Stream)<sup id="cite_ref-havsp_Sun_White_Paper_6_40-3" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_6-40"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup>.</li>
<li>Classe pour la gestion du réseau<sup id="cite_ref-havsp_Sun_White_Paper_6_40-4" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_6-40"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup>.</li>
<li>Classe pour la gestion des collections (Vector, hashtable…)<sup id="cite_ref-havsp_Sun_White_Paper_6_40-5" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_6-40"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup>.</li>
<li>Classe pour la gestion des dates<sup id="cite_ref-havsp_Sun_White_Paper_6_40-6" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_6-40"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup>.</li>
<li>Classe pour la gestion de la localisation et de l’internationalisation<sup id="cite_ref-havsp_Sun_White_Paper_6_40-7" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_6-40"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup>.</li>
<li>Le langage de programmation a été étoffé de spécificités issues de Java SE<sup id="cite_ref-havsp_Sun_White_Paper_6_40-8" class="reference"><a href="#cite_note-havsp_Sun_White_Paper_6-40"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup>&nbsp;:</li></ul>
<table class="wikitable alternance left">
<tbody><tr>
<td><b>Spécificités</b>
</td></tr>
<tr>
<td>Générics<sup id="cite_ref-43" class="reference"><a href="#cite_note-43"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup>
</td></tr>
<tr>
<td>Métadonnées
</td></tr>
<tr>
<td>Autoboxing<sup id="cite_ref-Autoboxing_44-0" class="reference"><a href="#cite_note-Autoboxing-44"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup>
</td></tr>
<tr>
<td>Amélioration de la boucle for
</td></tr>
<tr>
<td>Assert (<a href="Test_unitaire" title="Test unitaire">test unitaire</a>)
</td></tr>
<tr>
<td>Énumération<sup id="cite_ref-45" class="reference"><a href="#cite_note-45"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup>
</td></tr>
<tr>
<td>Utilisation de méthodes à argument Variables<sup id="cite_ref-Autoboxing_44-1" class="reference"><a href="#cite_note-Autoboxing-44"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup>
</td></tr>
<tr>
<td>Import static<sup id="cite_ref-46" class="reference"><a href="#cite_note-46"><span class="cite-bracket">[</span>33<span class="cite-bracket">]</span></a></sup>
</td></tr></tbody></table>
<p><b>Limitation du moteur de servlet de java card V3</b><sup id="cite_ref-SUN_SERVET_47-0" class="reference"><a href="#cite_note-SUN_SERVET-47"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup>
</p><p>Liste des principales caractéristiques présentes dans les spécifications Java Serlet 2.4<sup id="cite_ref-48" class="reference"><a href="#cite_note-48"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup> qui ne sont pas supportées par la plate-forme Java Card V3.
</p>
<ul><li>API non supportées (java.io.File, java.net.URL, java.util.Map, java.util.Set, java.security.cert.X509Certificate...). Par exemple, il est impossible d'effacer un fichier avec la méthode delete de la classe java.io.File, impossible d’utiliser la structure hashmap, impossible d'utiliser la gestion des certificats X509 (<abbr class="abbr" title="Request for comments" lang="en">RFC</abbr>&nbsp;2459<sup id="cite_ref-RFC-2459-t-d_49-0" class="reference"><a href="#cite_note-RFC-2459-t-d-49"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup>).</li>
<li>Nombre flottant (float). Il est impossible de réaliser des opérations sur des nombres à virgules.</li>
<li>Sérialisation et clonage d'objets (java.io.Serializable, java.lang.Cloneable). Il impossible de convertir les objets en flux binaire pour gérer persistance. Il est impossible de créer de nouvelles instances à partir d'une référence d'objet (clone).</li>
<li>Support des Java Server Pages V2.0. Les balises JSP ne sont pas reconnues, donc obligation d'écrire des servlets en Java.</li>
<li><a href="Java_Naming_and_Directory_Interface" title="Java Naming and Directory Interface">Java Naming and Directory Interface</a>. Pas d’accès aux classes de gestion d'annuaires.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Sécurité_des_applications_Java_Card"><span id="S.C3.A9curit.C3.A9_des_applications_Java_Card"></span>Sécurité des applications Java Card</h2></div>
<p>La gestion de la sécurité développée pour les cartes à puce est implémentée par la JCVM qui fournit les règles de sécurité suivantes<sup id="cite_ref-50" class="reference"><a href="#cite_note-50"><span class="cite-bracket">[</span>37<span class="cite-bracket">]</span></a></sup>&nbsp;:
</p>
<ul><li>Chaque JCVM contient une fonction vérificateur dont le rôle est de vérifier les fichiers Java compilés (.class) issue d'un compilateur java. Cependant sur la plate-forme Java Card version 3, il est possible de charger directement des fichiers de classes sans passer par le vérificateur et le convertisseur.</li>
<li>La fonction sécurité de la JCRE met en application des pare-feu pour isoler chaque applet ou servlet, ce qui empêche l'accès non autorisé d'objets créés par une autre applet.</li>
<li>Tous les accès aux méthodes et variables dans un fichier de classe se font par accesseurs<sup id="cite_ref-51" class="reference"><a href="#cite_note-51"><span class="cite-bracket">[</span>note 14<span class="cite-bracket">]</span></a></sup>. Ces accesseurs définissent un contrôle de cohérence du type primitif pour chaque méthode. Il est possible de déclarer une méthode «&nbsp;public&nbsp;», «&nbsp;protected&nbsp;» (accessibles par des méthodes dans la même sous-classe ou «&nbsp;package&nbsp;») ou «&nbsp;private&nbsp;» (aucun accès par d'autres classes). Si aucune déclaration n'est faite, la méthode peut être accessible par n'importe quelle classe dans le même paquet.</li></ul>
<p>Au-delà de la vérification de code objet implémentée par la JCVM, la plate-forme de Java Card 3 implémente des mécanismes de sécurité qui fournissent le niveau d'application et la sécurité des communications<sup id="cite_ref-Sun_13_52-0" class="reference"><a href="#cite_note-Sun_13-52"><span class="cite-bracket">[</span>38<span class="cite-bracket">]</span></a></sup>.
</p><p>La plate-forme de Java Card supporte un mécanisme d'isolement de code. L'isolement de code assure que le code chargé d'une application ne se heurte pas au code d'autres applications<sup id="cite_ref-Sun_14_53-0" class="reference"><a href="#cite_note-Sun_14-53"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup>.
</p><p>La plate-forme de Java Card supporte l'isolement de contexte<sup id="cite_ref-54" class="reference"><a href="#cite_note-54"><span class="cite-bracket">[</span>note 15<span class="cite-bracket">]</span></a></sup> et d’applications. L'isolement de contexte assure que les objets créés, donc en possession d’applications fonctionnant dans un même contexte, ne peuvent pas être accédés par des applications d'un autre contexte à moins que ces applications possédant ces objets ne fournissent explicitement des interfaces pour l'accès. De telles interfaces sont appelées des interfaces en commun et des objets implémentant ces interfaces, appelés <i>commun interface objets</i>, constituent des points d'entrée légaux à ces applications<sup id="cite_ref-Sun_14_53-1" class="reference"><a href="#cite_note-Sun_14-53"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup>.
</p><p>La sécurité à base de rôles permet à la politique de sécurité d'une application de limiter l'accès aux ressources protégées de l’application. Les restrictions sont basées sur les caractéristiques de l'application demandant l'accès, comme son identité et l'identité de l'utilisateur sur lequel la défense d’accès est demandée<sup id="cite_ref-Sun_14_53-2" class="reference"><a href="#cite_note-Sun_14-53"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup>.
</p><p>L'authentification de l'utilisateur est le processus par lequel un utilisateur prouve son identité à la carte. Cette identité authentifiée est alors utilisée par la plate-forme pour exécuter des décisions d'autorisation, comme celles requises par la sécurité à base de rôles, pour avoir accès aux ressources protégées<sup id="cite_ref-Sun_16_55-0" class="reference"><a href="#cite_note-Sun_16-55"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup>.
</p><p>L'authentification d'application client est le processus par lequel une application cliente prouve son identité à une application serveuse. Cette identité authentifiée est alors utilisée par l'application serveuse pour exécuter des décisions d'autorisation dans le but d'avoir accès aux ressources protégées<sup id="cite_ref-Sun_16_55-1" class="reference"><a href="#cite_note-Sun_16-55"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup>.
</p><p>Avec la plate-forme java Card, les applications peuvent interagir avec des applications à distance par des communications de réseaux sécurisées (TLS, SSL)<sup id="cite_ref-Sun_17_56-0" class="reference"><a href="#cite_note-Sun_17-56"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup>.
</p><p>Un développeur d'application Web peut déclarer des prérequis pour l'intégrité et la confidentialité lors du déploiement d'une application Web. Le développeur d'application ou le fournisseur peut aussi exiger que l'on héberge l'application sur un port sécurisé dédié avec des connexions HTTPS ouvertes<sup id="cite_ref-Sun_17_56-1" class="reference"><a href="#cite_note-Sun_17-56"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup>.
</p><p>La plate-forme Java Card supporte une structure de cryptographie. Un développeur d'application ou un fournisseur peut choisir l'algorithme de cryptographie qui répond le mieux aux besoins de son application
<sup id="cite_ref-Sun_19_57-0" class="reference"><a href="#cite_note-Sun_19-57"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Concept_de_programmation">Concept de programmation</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Principe_de_programmation_d'une_Applet"><span id="Principe_de_programmation_d.27une_Applet"></span>Principe de programmation d'une Applet</h3></div>
<p>Un Applet Java Card respecte la norme ISO 7816. C’est-à-dire qu’elle répond à des requêtes de la même manière qu’elle les reçoit sous la forme de commandes en byte codes. Ceci simplifie considérablement le développement d’une application, car il n’y a plus besoin de coder en bas niveau l’envoi et la réception des commandes. En effet cette partie est maintenant encapsulée dans un <a href="Framework" title="Framework">framework</a> java.
</p><p>Les commandes en byte code sont appelées des APDU (Application Protocol Data Unit). Celles-ci sont codées différemment en fonction de l’envoi et de la réception<sup id="cite_ref-ISO_7816-4_58-0" class="reference"><a href="#cite_note-ISO_7816-4-58"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup>.
</p><p>Une commande APDU telle qu'elle est envoyée depuis le lecteur à la carte Java est une série de cinq octets éventuellement suivis d'un nombre variable d'octets, formatés comme suit&nbsp;:
</p>

<dl><dt>CLA</dt>
<dd>CLA est le nom du premier octet, dit octet de classe, défini par la norme ISO 7816, indiquant le numéro de commande<sup id="cite_ref-ISO_7816-4_58-1" class="reference"><a href="#cite_note-ISO_7816-4-58"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup>.</dd>
<dt>INS</dt>
<dd>INS est le nom du second octet, dit octet d’instruction<sup id="cite_ref-ISO_7816-4_58-2" class="reference"><a href="#cite_note-ISO_7816-4-58"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup>.</dd>
<dt>P1</dt>
<dd>P1 est le nom du troisième octet, dit octet de paramètre 1<sup id="cite_ref-ISO_7816-4_58-3" class="reference"><a href="#cite_note-ISO_7816-4-58"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup>.</dd>
<dt>P2</dt>
<dd>P2 est le nom du quatrième octet, dit octet de paramètre 2<sup id="cite_ref-ISO_7816-4_58-4" class="reference"><a href="#cite_note-ISO_7816-4-58"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup>.</dd>
<dt>Ln</dt>
<dd>Ln est le nom du cinquième octet, il indique le nombre d'octets de données qui vont suivre (qu'elles soient envoyées ou reçues, 0x00 indiquant qu'aucune donnée additionnelle ne suivra)<sup id="cite_ref-ISO_7816-4_58-5" class="reference"><a href="#cite_note-ISO_7816-4-58"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup>.</dd>
<dt>Données</dt>
<dd>Ce sont les données, au nombre de Ln, qui sont transmises par le lecteur à la carte. Si l'application embarquée prévoit seulement une transmission en sens inverse, aucune donnée n'est transmise ici<sup id="cite_ref-ISO_7816-4_58-6" class="reference"><a href="#cite_note-ISO_7816-4-58"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup>.</dd>
<dt>Le</dt>
<dd>Le est le dernier octet après les données indiquant la taille maximale des données pour la réponse<sup id="cite_ref-ISO_7816-4_58-7" class="reference"><a href="#cite_note-ISO_7816-4-58"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup>.</dd></dl>
<p>Une réponse APDU telle qu'elle est envoyée depuis la carte Java au lecteur, est une série d'octets, retournée en réponse à une commande et formatée comme suit&nbsp;:
</p>

<dl><dt>Données</dt>
<dd>Ce sont les données, au nombre de Le, qui sont envoyées par la carte au lecteur<sup id="cite_ref-ISO_7816-4_58-8" class="reference"><a href="#cite_note-ISO_7816-4-58"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup>.</dd>
<dt>Statut</dt>
<dd>statut renvoyé par la carte, codé sur deux octets nommés&nbsp;: SW1 et SW2.</dd>
<dt>SW1</dt>
<dd>le premier octet, appelé SW1 indique le type de réponse. La valeur hexadécimale une valeur entre <code>0x90</code> et <code>0x9F</code> indique que la commande a été correctement exécutée. Une valeur entre <code>0x60</code> et <code>0x6F</code> indique que la commande n'a pas pu être exécutée par le programme placé dans la carte<sup id="cite_ref-ISO_7816-4_58-9" class="reference"><a href="#cite_note-ISO_7816-4-58"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup>.</dd>
<dt>SW2</dt>
<dd>le second octet, appelé SW2 rapporte éventuellement des informations supplémentaires concernant la réponse<sup id="cite_ref-ISO_7816-4_58-10" class="reference"><a href="#cite_note-ISO_7816-4-58"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup>.</dd></dl>
<p>Lorsque la commande au niveau de l’applet s’exécute normalement, la valeur du statut renvoyé correspond à <b>90 00</b>.
</p><p>Si une instruction INS prévoit à la fois d'envoyer et de recevoir des données, Java Card normalise un système d'APDU en deux phases. Dans un premier temps, l'APDU est envoyée avec pour &lt;Ln&gt; un nombre d'octets à envoyer, puis lorsque la carte répond 0x91 &lt;Le&gt; (indiquant que &lt;Le&gt; octets sont prêts à être retournés par la carte, en réponse à la commande) une APDU <i>Get Response</i> est transmise pour déclencher la réception de ces &lt;Le&gt; octets sortants<sup id="cite_ref-ISO_7816-4_58-11" class="reference"><a href="#cite_note-ISO_7816-4-58"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup>.
</p><p>En résumé, le champ de donnée(s) est optionnel dans les deux cas, APDU de commande et APDU de réponse. Par conséquent, il y a quatre cas possibles de communication entre le client et la plateforme Java Card Platform, Version 2.2.2 (ou Version 3.0.1
Classic Edition)&nbsp;:
</p>
<table class="wikitable">

<tbody><tr>
<td>Cas 1</td>
<td>APDU de commande sans donnée</td>
<td>APDU de réponse sans donnée
</td></tr>
<tr>
<td>Cas 2</td>
<td>APDU de commande avec donnée(s)</td>
<td>APDU de réponse sans donnée
</td></tr>
<tr>
<td>Cas 3</td>
<td>APDU de commande sans donnée</td>
<td>APDU de réponse avec donnée(s)
</td></tr>
<tr>
<td>Cas 4</td>
<td>APDU de commande avec donnée(s)</td>
<td>APDU de réponse avec donnée(s)
</td></tr></tbody></table>

<p>Avant de pouvoir transmettre une commande à une Applet déployée dans une Java Card, il est nécessaire de la sélectionner par l’envoi d’une commande APDU spécifique en précisant l’identifiant de l’application <b>AID</b><sup id="cite_ref-59" class="reference"><a href="#cite_note-59"><span class="cite-bracket">[</span>note 16<span class="cite-bracket">]</span></a></sup>. L’identifiant d’application est composé de deux parties. La première sur 5 octets, le <b>RID</b><sup id="cite_ref-60" class="reference"><a href="#cite_note-60"><span class="cite-bracket">[</span>note 17<span class="cite-bracket">]</span></a></sup>, est assigné par la norme ISO. Celui-ci correspond à l’identifiant propre à l’entreprise. Le second, <b>PIX</b><sup id="cite_ref-61" class="reference"><a href="#cite_note-61"><span class="cite-bracket">[</span>note 18<span class="cite-bracket">]</span></a></sup> est quant à lui composé entre 0 et 11 octets. L’assignation de celui-ci reste à la charge de l’entreprise qui développe l'application Java Card<sup id="cite_ref-62" class="reference"><a href="#cite_note-62"><span class="cite-bracket">[</span>44<span class="cite-bracket">]</span></a></sup>.
</p><p>Pour la programmation d’une Java Card, il y a cinq étapes importantes&nbsp;:
</p>
<ul><li>Écriture du code Java source&nbsp;;</li>
<li>Compilation du code&nbsp;;</li>
<li>Conversion des fichiers <code>.class</code> en <code>.cap</code>&nbsp;;</li>
<li>Vérification du fichier <code>.cap</code> (optionnel)&nbsp;;</li>
<li>Installation du fichier <code>.cap</code> dans la Java Card.</li></ul>
<p>Le point fort du développement Java Card est que les deux premières étapes peuvent être réalisées avec un environnement de développement JAVA classique.
</p><p>Voici un exemple de code renvoyant tout simplement la chaine de caractères ‘Hello World’ sur la demande liée à l’instruction <b>0x10</b>. Dans cet exemple le AID est composé des valeurs de RID = DA8EF6DD26 et de PIX = 86E899.
</p><p><b>Exemple d’applet ‘Hello World’</b><sup id="cite_ref-Gemalto_19_63-0" class="reference"><a href="#cite_note-Gemalto_19-63"><span class="cite-bracket">[</span>45<span class="cite-bracket">]</span></a></sup>.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">javacard.framework.*</span><span class="p">;</span>

<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">HelloWorld</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">Applet</span><span class="w"> </span><span class="p">{</span>

<span class="w"> </span><span class="c1">// Initialisation de la variable avec ‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ' ', 'W', 'o', 'r', 'l', 'd'.</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">byte</span><span class="o">[]</span><span class="w"> </span><span class="n">message</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="mh">0x48</span><span class="p">,</span><span class="w"> </span><span class="mh">0x65</span><span class="p">,</span><span class="w"> </span><span class="mh">0x6c</span><span class="p">,</span><span class="w"> </span><span class="mh">0x6c</span><span class="p">,</span><span class="w"> </span><span class="mh">0x6f</span><span class="p">,</span><span class="w"> </span><span class="mh">0x20</span><span class="p">,</span><span class="w"> </span><span class="mh">0x77</span><span class="p">,</span><span class="w"> </span><span class="mh">0x6f</span><span class="p">,</span><span class="w"> </span><span class="mh">0x72</span><span class="p">,</span><span class="w"> </span><span class="mh">0x6c</span><span class="p">,</span><span class="w"> </span><span class="mh">0x64</span><span class="w"> </span><span class="p">};</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">install</span><span class="p">(</span><span class="kt">byte</span><span class="o">[]</span><span class="w"> </span><span class="n">bArray</span><span class="p">,</span><span class="w"> </span><span class="kt">short</span><span class="w"> </span><span class="n">bOffset</span><span class="p">,</span><span class="w"> </span><span class="kt">byte</span><span class="w"> </span><span class="n">bLength</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">HelloWorld</span><span class="p">();</span><span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">protected</span><span class="w"> </span><span class="nf">HelloWorld</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">register</span><span class="p">();</span><span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">process</span><span class="p">(</span><span class="n">APDU</span><span class="w"> </span><span class="n">apdu</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">selectingApplet</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Retourne le statut à OK</span>
<span class="w"> </span><span class="k">return</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kt">byte</span><span class="o">[]</span><span class="w"> </span><span class="n">buffer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apdu</span><span class="p">.</span><span class="na">getBuffer</span><span class="p">()</span><span class="w"> </span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">buffer</span><span class="o">[</span><span class="n">ISO7816</span><span class="p">.</span><span class="na">OFFSET_CLA</span><span class="o">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="p">(</span><span class="kt">byte</span><span class="p">)(</span><span class="mh">0x80</span><span class="p">)</span><span class="w"> </span><span class="p">)</span>
<span class="w"> </span><span class="n">ISOException</span><span class="p">.</span><span class="na">throwIt</span><span class="p">(</span><span class="n">ISO7816</span><span class="p">.</span><span class="na">SW_CLA_NOT_SUPPORTED</span><span class="p">);</span><span class="w"> </span><span class="c1">// Retourne le status word CLA NOT SUPPORTED</span>
<span class="w"> </span><span class="k">switch</span><span class="p">(</span><span class="n">buffer</span><span class="o">[</span><span class="n">ISO7816</span><span class="p">.</span><span class="na">OFFSET_INS</span><span class="o">]</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="mh">0x10</span><span class="w"> </span><span class="p">:</span>
<span class="w"> </span><span class="c1">// Copie du contenu du message dans le buffer de la reponse</span>
<span class="w"> </span><span class="n">Util</span><span class="p">.</span><span class="na">arrayCopy</span><span class="p">(</span><span class="n">message</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="kt">byte</span><span class="p">)</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">buffer</span><span class="p">,</span><span class="w"> </span><span class="n">ISO7816</span><span class="p">.</span><span class="na">OFFSET_CDATA</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="kt">byte</span><span class="p">)</span><span class="n">message</span><span class="p">.</span><span class="na">length</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// Envoi de la réponse</span>
<span class="w"> </span><span class="n">apdu</span><span class="p">.</span><span class="na">setOutgoingAndSend</span><span class="p">(</span><span class="n">ISO7816</span><span class="p">.</span><span class="na">OFFSET_CDATA</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="kt">byte</span><span class="p">)</span><span class="n">message</span><span class="p">.</span><span class="na">length</span><span class="p">);</span>
<span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="k">default</span><span class="p">:</span>
<span class="w"> </span><span class="c1">// Retourne le statut à la valeur INS NOT SUPPORTED</span>
<span class="w"> </span><span class="n">ISOException</span><span class="p">.</span><span class="na">throwIt</span><span class="p">(</span><span class="n">ISO7816</span><span class="p">.</span><span class="na">SW_INS_NOT_SUPPORTED</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>

<p>Pour cet exemple, deux échanges d'APDU sont nécessaires entre le client et la Java Card&nbsp;:
Le premier envoi correspond à la sélection de l'application en précisant l'AID&nbsp;:
</p><p>Commande&nbsp;: 0x00 0xA4 0x04 0x00 0X08 0XDA 0X8E 0XF6 0XDD 0X26 0X86 0XE8 0X9A
</p><p>Réponse&nbsp;: 90 00
</p><p>Le second appel, envoi le code instruction 0x10 correspondant à la fonction 'char* hello()' sans données supplémentaires
</p><p>Commande&nbsp;: 0x80 0x10 0x00 0x00 0x00
</p><p>Réponse&nbsp;: 48 65 6C 6C 6F 20 77 6F 72 6C 64 90 00
</p><p>Le contenu de l'APDU de réponse contient les données envoyées par l'Applet suivies du code de retour qui a pour valeur 90 00. Celle-ci nous indique que la fonction a été exécutée sans problème. Les données sont composées d'une série d'octets contenant les 11 caractères de la <a href="Cha%C3%AEne_de_caract%C3%A8res" title="Chaîne de caractères">chaîne de caractères</a> 'Hello World'.
</p>
<div class="mw-heading mw-heading3"><h3 id="Principe_de_programmation_d'une_Servlet"><span id="Principe_de_programmation_d.27une_Servlet"></span>Principe de programmation d'une Servlet</h3></div>
<p>Voici un exemple de code renvoyant la chaine de caractères ‘Hello World from Java Card’ lors de l'appel à la Servlet.
</p><p><b>Exemple de Servlet ‘Hello World’</b>
</p><p>Contenu du fichier .java
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kn">package</span><span class="w"> </span><span class="nn">org.carte.web</span><span class="p">;</span>

<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.IOException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.PrintWriter</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.servlet.http.HttpServlet</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.servlet.http.HttpServletRequest</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.servlet.http.HttpServletResponse</span><span class="p">;</span>

<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">HelloWorldWeb</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">HttpServlet</span><span class="w"> </span><span class="p">{</span>

<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">doGet</span><span class="p">(</span><span class="n">HttpServletRequest</span><span class="w"> </span><span class="n">request</span><span class="p">,</span><span class="w"> </span><span class="n">HttpServletResponse</span><span class="w"> </span><span class="n">response</span><span class="p">)</span>
<span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">IOException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">response</span><span class="p">.</span><span class="na">setContentType</span><span class="p">(</span><span class="s">"text/html"</span><span class="p">);</span>
<span class="w"> </span><span class="n">PrintWriter</span><span class="w"> </span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">response</span><span class="p">.</span><span class="na">getWriter</span><span class="p">();</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"&lt;html&gt;&lt;head&gt;&lt;title&gt;HelloWorldWeb&lt;/title&gt;&lt;/head&gt;"</span><span class="p">);</span>
<span class="w"> </span><span class="n">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"&lt;body&gt;&lt;h1&gt;HelloWorldWeb&lt;/h1&gt;"</span><span class="p">);</span>
<span class="w"> </span><span class="n">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Hello World from Java Card&lt;/body&gt;&lt;/html&gt;"</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">finally</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">out</span><span class="p">.</span><span class="na">close</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>Contenu du fichier web.xml
</p>
<div class="mw-highlight mw-highlight-lang-xml mw-content-ltr" dir="ltr"><pre><span></span><span class="nt">&lt;web-app</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">"http://java.sun.com/xml/ns/j2ee"</span>
<span class="w"> </span><span class="na">xmlns:xsi=</span><span class="s">"http://www.w3.org/2001/XMLSchema-instance"</span>
<span class="w"> </span><span class="na">version=</span><span class="s">"2.4"</span>
<span class="w"> </span><span class="na">xsi:schemaLocation=</span><span class="s">"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/javacard/jcweb-app_3_0.xsd"</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;description&gt;</span>The<span class="w"> </span>web<span class="w"> </span>application<span class="w"> </span>deployment<span class="w"> </span>descriptor<span class="w"> </span>conveys<span class="w"> </span>web<span class="w"> </span>application<span class="w"> </span>model
elements<span class="w"> </span>and<span class="w"> </span>configuration<span class="w"> </span>information<span class="w"> </span>of<span class="w"> </span>an<span class="w"> </span>application<span class="w"> </span>between<span class="w"> </span>application
developers,<span class="w"> </span>application<span class="w"> </span>assemblers,<span class="w"> </span>and<span class="w"> </span>deployers.
<span class="w"> </span><span class="nt">&lt;/description&gt;</span>
<span class="w"> </span><span class="nt">&lt;display-name&gt;</span>Hello<span class="w"> </span>World<span class="w"> </span>Web<span class="nt">&lt;/display-name&gt;</span>
<span class="w"> </span><span class="nt">&lt;servlet&gt;</span>
<span class="w"> </span><span class="nt">&lt;servlet-name&gt;</span>HelloWorldWeb<span class="nt">&lt;/servlet-name&gt;</span>
<span class="w"> </span><span class="nt">&lt;servlet-class&gt;</span>org.carte.web.HelloWorldWeb<span class="nt">&lt;/servlet-class&gt;</span>
<span class="w"> </span><span class="nt">&lt;/servlet&gt;</span>
<span class="w"> </span><span class="nt">&lt;servlet-mapping&gt;</span>
<span class="w"> </span><span class="nt">&lt;servlet-name&gt;</span>HelloWorldWeb<span class="nt">&lt;/servlet-name&gt;</span>
<span class="w"> </span><span class="nt">&lt;url-pattern&gt;</span>/helloworldweb<span class="nt">&lt;/url-pattern&gt;</span>
<span class="w"> </span><span class="nt">&lt;/servlet-mapping&gt;</span>
<span class="nt">&lt;/web-app&gt;</span>
</pre></div>
<p>L'appel de la Servlet se fait par l’intermédiaire d'un navigateur web en précisant l'URL suivante&nbsp;:
</p>
<pre>http://adresse_de_la_carte/helloworldweb</pre>
<p>L'utilisation des Servlets sur une Java card se fait exactement de la même manière que sur une plate-forme JAVA EE.
</p>
<div class="mw-heading mw-heading2"><h2 id="Intérêts"><span id="Int.C3.A9r.C3.AAts"></span>Intérêts</h2></div>
<p>Les producteurs de cartes à puces (tel que <a href="Gemalto" class="mw-redirect" title="Gemalto">Gemalto</a>, <a href="Idemia" title="Idemia">Idemia</a>...) implémentent les fonctionnalités de Java Card suivantes<sup id="cite_ref-Oracle_64-0" class="reference"><a href="#cite_note-Oracle-64"><span class="cite-bracket">[</span>46<span class="cite-bracket">]</span></a></sup>&nbsp;:
</p>
<ul><li>Interopérabilité&nbsp;: les Applets développées avec la technologie Java Card fonctionnent sur n'importe quel type de cartes à puce (et indépendamment du matériel sous-jacent).</li>
<li>Sécurité&nbsp;: la technologie de Java Card repose sur la sécurité du langage de programmation Java pour fournir un environnement d'exécution sécurisé.</li>
<li>Possibilité d'applications multiples<sup id="cite_ref-65" class="reference"><a href="#cite_note-65"><span class="cite-bracket">[</span>note 19<span class="cite-bracket">]</span></a></sup>&nbsp;: la technologie de Java Card permet à de multiples applications de cohabiter en sécurité sur une seule carte à puce.</li>
<li>Dynamique&nbsp;: de nouvelles applications peuvent être installées en toute sécurité après qu'une carte a été fournie à l'utilisateur, permettant aux producteurs de carte de répondre dynamiquement aux besoins de changement de leur client.</li>
<li>Compatible avec les normes existantes&nbsp;: l'API de Carte Java est compatible avec les standards internationaux pour <a href="Carte_%C3%A0_puce" title="Carte à puce">Carte à puce</a> comme ISO7816 ou <a href="Europay_Mastercard_Visa" title="Europay Mastercard Visa">Europay Mastercard Visa</a>&nbsp;:</li></ul>
<p>L'utilisation du langage de programmation Java apporte un gain pour les développeurs d'applications<sup id="cite_ref-Oracle_64-1" class="reference"><a href="#cite_note-Oracle-64"><span class="cite-bracket">[</span>46<span class="cite-bracket">]</span></a></sup>&nbsp;:
</p>
<ul><li>La <a href="Programmation_orient%C3%A9e_objet" title="Programmation orientée objet">programmation orientée objet</a> apporte une plus grande modularité du code et sa réutilisation, augmentant la productivité du programmeur.</li>
<li>La protection figurant dans les caractéristiques du langage de programmation Java s'applique aux applets de Java Card, mettant en application des attributs de protection et de typage fort.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Marché"><span id="March.C3.A9"></span>Marché</h2></div>
<p>De nombreux types de <a href="Carte_%C3%A0_puce" title="Carte à puce">cartes à puce</a> peuvent profiter de la technologie de Java Card<sup id="cite_ref-66" class="reference"><a href="#cite_note-66"><span class="cite-bracket">[</span>47<span class="cite-bracket">]</span></a></sup>:
</p>
<ul><li><a href="Carte_SIM" title="Carte SIM">Carte SIM</a> (Subcriber Identity Module) utilisée dans les téléphones cellulaire sur les réseaux sans fil.</li>
<li>Carte bancaire.</li>
<li>Carte d'identité.</li>
<li>Carte santé.</li>
<li>Les cartes qui fournissent l'accès logique et physique aux ressources d'entreprises.</li></ul>
<p>Sur la majorité de réseaux téléphoniques cellulaires, un abonné utilise une <a href="Carte_%C3%A0_puce" title="Carte à puce">carte à puce</a> généralement appelée une <a href="Carte_SIM" title="Carte SIM">carte SIM</a> pour activer le téléphone. La carte authentifie l'utilisateur et fournit des <a href="Cl%C3%A9_de_chiffrement" title="Clé de chiffrement">clés de chiffrement</a> pour le transport de la voix numérique. les <a href="Carte_SIM" title="Carte SIM">cartes SIM</a> implémentées de la technologie de Java Card peuvent aussi fournir des services transactionnels bancaires à distance. Des centaines de millions de <a href="Carte_SIM" title="Carte SIM">cartes SIM</a> basées sur la technologie de Java Card fonctionnent déjà avec des services innovants sur les <a href="T%C3%A9l%C3%A9phonie_mobile" title="Téléphonie mobile">téléphones cellulaires</a>.
</p><p>Dans le secteur bancaire, les <a href="Cartes_%C3%A0_puce" class="mw-redirect" title="Cartes à puce">cartes à puce</a> donnent l'accès sécurisé aux utilisateurs à une large gamme de services financiers incluant les distributeurs automatiques de billets, le paiement de factures et de péages. La technologie de Java Card permet à une seule <a href="Carte_%C3%A0_puce" title="Carte à puce">carte à puce</a> d'héberger de multiples applications financières et de livrer des services tiers ou de sécuriser sur le <a href="Commerce_%C3%A9lectronique" class="mw-redirect" title="Commerce électronique">commerce en ligne</a>.
</p><p>De nombreuses applications sont disponibles dans les domaines où la sécurité et l'authentification sont importantes tel que l'accès sécurisé à des installations, dossiers médicaux.
</p><p>La technologie de Java Card améliore l'accès grand public aux nouveaux services de <a href="Commerce_en_ligne" title="Commerce en ligne">commerce en ligne</a> par l’intermédiaire d'appareils connectés. En effet, les <a href="T%C3%A9l%C3%A9phonie_mobile" title="Téléphonie mobile">téléphones cellulaires</a> et les équipements de télévision pour chaînes payantes sont les exemples de marchés où la majorité de produits, déjà disponibles, incluent déjà des lecteurs de <a href="Carte_%C3%A0_puce" title="Carte à puce">carte à puce</a>.
</p><p><b>Acteurs du marché</b><sup id="cite_ref-Marche1_67-0" class="reference"><a href="#cite_note-Marche1-67"><span class="cite-bracket">[</span>48<span class="cite-bracket">]</span></a></sup>.
</p>
<table class="wikitable">

<tbody><tr>
<th>Fabricant</th>
<th>Gamme de Produits
</th></tr>
<tr>
<td>STMicroelectronics, Atmel, Infineon, Samsung, NXP, Inside Contactless</td>
<td>Semi-Conducteur et Micro-Processeur
</td></tr>
<tr>
<td>Thales, IDEMIA, Safran Morpho, Giesecke &amp; Devrient</td>
<td>Cartes
</td></tr>
<tr>
<td>Ingenico, Verifone, Hypercom, Nokia</td>
<td>Terminaux et lecteurs
</td></tr>
<tr>
<td>Orange, RATP, Véolia, BNP Paribas</td>
<td>Opérateur de services et e-Gouvernement
</td></tr>
<tr>
<td>Trusted Logic, Prism, Multos</td>
<td>Logiciel embarqués OS et Applications
</td></tr>
<tr>
<td>Cesti, Fime</td>
<td>Évaluation et Test
</td></tr>
<tr>
<td>Experian, Atos Worldline, First Data, Sopra</td>
<td>Intégration et systèmes
</td></tr></tbody></table>
<p><b>Chiffres</b>
</p><p>Selon le rapport gouvernemental «Dimension économique et industrielle des cartes à puces» de <time class="nowrap" datetime="2009-11" data-sort-value="2009-11">novembre 2009</time>, le marché mondial des cartes à puces a dépassé les 5&nbsp;milliards d'unités. (Source Nodal)<sup id="cite_ref-Marche2_68-0" class="reference"><a href="#cite_note-Marche2-68"><span class="cite-bracket">[</span>49<span class="cite-bracket">]</span></a></sup>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Glossaire">Glossaire</h2></div>
<ul><li><b>AID (Application IDentifier)</b>&nbsp;: une chaine de caractères utilisée comme identifiant unique des Applets de la carte à puce selon la norme <a href="ISO_7816" class="mw-redirect" title="ISO 7816">ISO 7816</a></li>
<li><b>APDU</b>&nbsp;: Abréviation pour Application Protocol Data Units défini selon la norme ISO 7816-4.</li>
<li><b>APPLET</b>&nbsp;: un composant simple d'une application Java Card qui s'exécute dans l’environnement APDU.</li>
<li><b>APPLET ETENDU</b>: Dans le contexte Java Card, Une Applet étendu possède les fonctionnalités de la version connectée. (Exemple&nbsp;: Manipulation de Chaine de caractère).</li>
<li><b>Conteneur d'Applet</b>&nbsp;: Mécanisme qui manage le cycle de vie des Applets. Dans le contexte Java Card, le conteneur fournit les services de communication sur lesquels les commandes d'APDU et des réponses sont envoyés.</li>
<li><b>Ramasse Miette automatique (Garbage collector)</b>&nbsp;: Mécanisme qui libère automatiquement la mémoire utilisé par des objets qui ne sont plus utilisés par l'application. (Uniquement disponible dans la version 3 connectée).</li>
<li><b>SERVLET</b>&nbsp;: Un composant générant dynamiquement du contenu web s’exécutant au sein d'une application web.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Notes_et_références"><span id="Notes_et_r.C3.A9f.C3.A9rences"></span>Notes et références</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Notes">Notes</h3></div>
<div class="references-small decimal" style=""><div class="mw-references-wrap mw-references-columns"><ol class="references" data-mw-group="note">
<li id="cite_note-6"><span class="mw-cite-backlink"><a href="#cite_ref-6">↑</a> </span><span class="reference-text">qui est nommée dans la littérature scientifique anglo-saxonne <i>Java Card Virtual Machine</i></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><a href="#cite_ref-8">↑</a> </span><span class="reference-text">qui est nommé dans la littérature scientifique anglo-saxonne <i>Java Card Runtime Environment</i></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><a href="#cite_ref-9">↑</a> </span><span class="reference-text">qui sont nommées dans la littérature scientifique anglo-saxonne <i>Application Programmer Interface</i></span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><a href="#cite_ref-13">↑</a> </span><span class="reference-text"><i>bytecode</i> ou code binaire intermédiaire en français inclus dans les fichiers de classe (extension .class ).</span>
</li>
<li id="cite_note-16"><span class="mw-cite-backlink"><a href="#cite_ref-16">↑</a> </span><span class="reference-text">qui est nommé dans la littérature scientifique anglo-saxonne <i>Off-Card</i></span>
</li>
<li id="cite_note-17"><span class="mw-cite-backlink"><a href="#cite_ref-17">↑</a> </span><span class="reference-text">qui est nommé dans la littérature scientifique anglo-saxonne <i>Private Computer</i>, «Ordinateur personnel» en français.</span>
</li>
<li id="cite_note-18"><span class="mw-cite-backlink"><a href="#cite_ref-18">↑</a> </span><span class="reference-text">qui est nommé dans la littérature scientifique anglo-saxonne <i>On-Card</i></span>
</li>
<li id="cite_note-21"><span class="mw-cite-backlink"><a href="#cite_ref-21">↑</a> </span><span class="reference-text">qui est nommé dans la littérature scientifique anglo-saxonne <i>CAP file</i> (<b>C</b>onverted <b>AP</b>plet)</span>
</li>
<li id="cite_note-23"><span class="mw-cite-backlink"><a href="#cite_ref-23">↑</a> </span><span class="reference-text">qui est nommé dans la littérature scientifique anglo-saxonne <i>Export File</i></span>
</li>
<li id="cite_note-26"><span class="mw-cite-backlink"><a href="#cite_ref-26">↑</a> </span><span class="reference-text">qui est nommé dans la littérature scientifique anglo-saxonne <i>Card Acceptance</i>
Device<i></i></span>
</li>
<li id="cite_note-28"><span class="mw-cite-backlink"><a href="#cite_ref-28">↑</a> </span><span class="reference-text">qui est nommée dans la littérature scientifique anglo-saxonne <i>industry-specific extensions</i></span>
</li>
<li id="cite_note-29"><span class="mw-cite-backlink"><a href="#cite_ref-29">↑</a> </span><span class="reference-text">méthodes de bases qui sont nommées dans la littérature scientifique anglo-saxonne <i>natives method</i></span>
</li>
<li id="cite_note-37"><span class="mw-cite-backlink"><a href="#cite_ref-37">↑</a> </span><span class="reference-text">qui est nommée dans la littérature scientifique anglo-saxonne <i>Connected Limited Device Configuration </i></span>
</li>
<li id="cite_note-51"><span class="mw-cite-backlink"><a href="#cite_ref-51">↑</a> </span><span class="reference-text">. Un accesseur est une méthode permettant de récupérer le contenu d'une donnée membre protégée</span>
</li>
<li id="cite_note-54"><span class="mw-cite-backlink"><a href="#cite_ref-54">↑</a> </span><span class="reference-text">contexte&nbsp;: Un service de nom associe des noms avec des objets. Une association entre un nom et un objet est appelée une attache et des jeux d'attaches sont appelés un contexte. Un nom dans un contexte peut devoir nécessairement un autre contexte qui utilise les mêmes conventions de nommage&nbsp;; le contexte attaché est appelé un sous-contexte.</span>
</li>
<li id="cite_note-59"><span class="mw-cite-backlink"><a href="#cite_ref-59">↑</a> </span><span class="reference-text"><i>Application IDentifiant</i> Identifiant d'application en français</span>
</li>
<li id="cite_note-60"><span class="mw-cite-backlink"><a href="#cite_ref-60">↑</a> </span><span class="reference-text"><i>Ressource IDentifier</i> Identifiant de la ressource en français</span>
</li>
<li id="cite_note-61"><span class="mw-cite-backlink"><a href="#cite_ref-61">↑</a> </span><span class="reference-text"><i>Proprietary IDentifier extension</i> extension de l'identifiant propriétaire en français</span>
</li>
<li id="cite_note-65"><span class="mw-cite-backlink"><a href="#cite_ref-65">↑</a> </span><span class="reference-text">qui est nommé dans la littérature scientifique anglo-saxonne <i>Application multi capability</i>.</span>
</li>
</ol></div>
</div>
<div class="mw-heading mw-heading3"><h3 id="Références"><span id="R.C3.A9f.C3.A9rences"></span>Références</h3></div>
<div class="references-small decimal" style="column-width:18em; column-count:4;"><ol class="references">
<li id="cite_note-havsp_Baentsch_p37-1"><span class="reference-text"><a href="#Baentsch1999">Baentsch 1999</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;37</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a> </span><span class="reference-text"><a href="#oracle_spécifications">Oracle&nbsp;: Spécifications des versions</a></span>
</li>
<li id="cite_note-Chen2000_29-3"><span class="reference-text"><a href="#Chen2000">Zhiqun 2000</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;29</span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a> </span><span class="reference-text"><a href="#ISO7816">ISO7816</a></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a> </span><span class="reference-text"><a href="#Oracle">Oracle&nbsp;: Chapitre Composants</a></span>
</li>
<li id="cite_note-Chen2000_30-7"><span class="reference-text"><a href="#Chen2000">Zhiqun 2000</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;30</span>
</li>
<li id="cite_note-havsp_Sun_White_Paper_7-10"><span class="mw-cite-backlink"><a href="#cite_ref-havsp_Sun_White_Paper_7_10-0">↑</a> </span><span class="reference-text"><a href="#SUN_PLATFORM">Sun 2008</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;7</span>
</li>
<li id="cite_note-havsp_Sun_White_Paper_1-11"><span class="mw-cite-backlink"><a href="#cite_ref-havsp_Sun_White_Paper_1_11-0">↑</a> </span><span class="reference-text"><a href="#SUN_PLATFORM">Sun 2008</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;1</span>
</li>
<li id="cite_note-havsp_Sun_White_Paper_2-12"><span class="reference-text"><a href="#SUN_PLATFORM">Sun 2008</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;2</span>
</li>
<li id="cite_note-Chen2000_34-14"><span class="reference-text"><a href="#Chen2000">Zhiqun 2000</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;34</span>
</li>
<li id="cite_note-Chen2000_31-15"><span class="reference-text"><a href="#Chen2000">Zhiqun 2000</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;31</span>
</li>
<li id="cite_note-havsp_Oracle_1-19"><span class="mw-cite-backlink"><a href="#cite_ref-havsp_Oracle_1_19-0">↑</a> </span><span class="reference-text"><a href="#Oracle_OCV">Oracle 2002</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;1</span>
</li>
<li id="cite_note-20"><span class="mw-cite-backlink"><a href="#cite_ref-20">↑</a> </span><span class="reference-text"><a href="#Casset2002">Casset 2002</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;209</span>
</li>
<li id="cite_note-Chen2000_32-22"><span class="mw-cite-backlink"><a href="#cite_ref-Chen2000_32_22-0">↑</a> </span><span class="reference-text"><a href="#Chen2000">Zhiqun 2000</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;32</span>
</li>
<li id="cite_note-Chen2000_33-24"><span class="mw-cite-backlink"><a href="#cite_ref-Chen2000_33_24-0">↑</a> </span><span class="reference-text"><a href="#Chen2000">Zhiqun 2000</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;33</span>
</li>
<li id="cite_note-Chen2000_35-25"><span class="reference-text"><a href="#Chen2000">Zhiqun 2000</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;35</span>
</li>
<li id="cite_note-Chen2000_36-27"><span class="reference-text"><a href="#Chen2000">Zhiqun 2000</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;36</span>
</li>
<li id="cite_note-Chen2000_37-30"><span class="reference-text"><a href="#Chen2000">Zhiqun 2000</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;37</span>
</li>
<li id="cite_note-Dufay_2003_p28-31"><span class="reference-text"><a href="#Dufay">Dufay,2003</a>, p.28</span>
</li>
<li id="cite_note-Chen2000_38-32"><span class="reference-text"><a href="#Chen2000">Zhiqun 2000</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;38</span>
</li>
<li id="cite_note-33"><span class="mw-cite-backlink"><a href="#cite_ref-33">↑</a> </span><span class="reference-text"><a href="#Gemalto">Gemalto&nbsp;: Chapitre APIs</a></span>
</li>
<li id="cite_note-SUN_API-34"><span class="mw-cite-backlink"><a href="#cite_ref-SUN_API_34-0">↑</a> </span><span class="reference-text"><a href="#SUN_API">Sun 2002</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;147</span>
</li>
<li id="cite_note-havsp_Ghindici_6-35"><span class="mw-cite-backlink"><a href="#cite_ref-havsp_Ghindici_6_35-0">↑</a> </span><span class="reference-text"><a href="#Ghindici">Ghindici 2006</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;6</span>
</li>
<li id="cite_note-havsp_Sun_White_Paper_5-36"><span class="reference-text"><a href="#SUN_PLATFORM">Sun 2008</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;5</span>
</li>
<li id="cite_note-38"><span class="mw-cite-backlink"><a href="#cite_ref-38">↑</a> </span><span class="reference-text"><a href="#Sun_CLDC">Sun CLDC&nbsp;: Introduction</a></span>
</li>
<li id="cite_note-havsp_Sun_White_Paper_4-39"><span class="mw-cite-backlink"><a href="#cite_ref-havsp_Sun_White_Paper_4_39-0">↑</a> </span><span class="reference-text"><a href="#SUN_PLATFORM">Sun 2008</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;4</span>
</li>
<li id="cite_note-havsp_Sun_White_Paper_6-40"><span class="reference-text"><a href="#SUN_PLATFORM">Sun 2008</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;6</span>
</li>
<li id="cite_note-41"><span class="mw-cite-backlink"><a href="#cite_ref-41">↑</a> </span><span class="reference-text"><a href="#Type_Java">Type utilisé dans la programmation Java</a></span>
</li>
<li id="cite_note-42"><span class="mw-cite-backlink"><a href="#cite_ref-42">↑</a> </span><span class="reference-text"><a href="#StringBuilder">Classe StringBuilder</a></span>
</li>
<li id="cite_note-43"><span class="mw-cite-backlink"><a href="#cite_ref-43">↑</a> </span><span class="reference-text"><a href="#Generics">Types génériques du langage Java</a></span>
</li>
<li id="cite_note-Autoboxing-44"><span class="reference-text"><a href="#Autoboxing">Autoboxing en Java</a></span>
</li>
<li id="cite_note-45"><span class="mw-cite-backlink"><a href="#cite_ref-45">↑</a> </span><span class="reference-text"><a href="#Enumération">Énumération du langage Java</a></span>
</li>
<li id="cite_note-46"><span class="mw-cite-backlink"><a href="#cite_ref-46">↑</a> </span><span class="reference-text"><a href="#Static_Imports">Import statique du langage Java</a></span>
</li>
<li id="cite_note-SUN_SERVET-47"><span class="mw-cite-backlink"><a href="#cite_ref-SUN_SERVET_47-0">↑</a> </span><span class="reference-text"><a href="#SUN_SERVLET">Java Servlet Specification&nbsp;: Java Card Platform, Version 3.0.1 Connected Edition</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;3-1</span>
</li>
<li id="cite_note-48"><span class="mw-cite-backlink"><a href="#cite_ref-48">↑</a> </span><span class="reference-text"><a href="#Servlet_2_4">Java Servlet V2.4</a></span>
</li>
<li id="cite_note-RFC-2459-t-d-49"><span class="mw-cite-backlink"><a href="#cite_ref-RFC-2459-t-d_49-0">↑</a> </span><span class="reference-text"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> «&nbsp;<a rel="nofollow" class="external text" href="https://tools.ietf.org/html/rfc2459"><span class="lang-en" lang="en">Internet X.509 Public Key Infrastructure / Certificate and CRL Profile</span></a>&nbsp;», <span class="lang-en" lang="en"><a href="Request_for_comments" title="Request for comments">Request for comments</a></span> <abbr class="abbr" title="numéro">n<sup>o</sup></abbr>&nbsp;2459, <time class="nowrap" datetime="1999-01" data-sort-value="1999-01">janvier 1999</time>
</span>
</li>
<li id="cite_note-50"><span class="mw-cite-backlink"><a href="#cite_ref-50">↑</a> </span><span class="reference-text"><a href="#Gemalto">Gemalto&nbsp;: Chapitre sécurité</a></span>
</li>
<li id="cite_note-Sun_13-52"><span class="mw-cite-backlink"><a href="#cite_ref-Sun_13_52-0">↑</a> </span><span class="reference-text"><a href="#SUN_PLATFORM">Sun 2008</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;13</span>
</li>
<li id="cite_note-Sun_14-53"><span class="reference-text"><a href="#SUN_PLATFORM">Sun 2008</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;14</span>
</li>
<li id="cite_note-Sun_16-55"><span class="reference-text"><a href="#SUN_PLATFORM">Sun 2008</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;16</span>
</li>
<li id="cite_note-Sun_17-56"><span class="reference-text"><a href="#SUN_PLATFORM">Sun 2008</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;17</span>
</li>
<li id="cite_note-Sun_19-57"><span class="mw-cite-backlink"><a href="#cite_ref-Sun_19_57-0">↑</a> </span><span class="reference-text"><a href="#SUN_PLATFORM">Sun 2008</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;19</span>
</li>
<li id="cite_note-ISO_7816-4-58"><span class="reference-text"><a href="#ISO7816">ISO&nbsp;: norme ISO7816-4</a></span>
</li>
<li id="cite_note-62"><span class="mw-cite-backlink"><a href="#cite_ref-62">↑</a> </span><span class="reference-text"><a href="#ISO7816">ISO&nbsp;: norme ISO7816-5</a></span>
</li>
<li id="cite_note-Gemalto_19-63"><span class="mw-cite-backlink"><a href="#cite_ref-Gemalto_19_63-0">↑</a> </span><span class="reference-text"><a href="#Gemalto_developper">Gemalto 2009</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;19</span>
</li>
<li id="cite_note-Oracle-64"><span class="reference-text"><a href="#Oracle">Oracle&nbsp;: Chapitre bénéfices</a></span>
</li>
<li id="cite_note-66"><span class="mw-cite-backlink"><a href="#cite_ref-66">↑</a> </span><span class="reference-text"><a href="#oracle_overview">Oracle&nbsp;: Chapitre Industries</a></span>
</li>
<li id="cite_note-Marche1-67"><span class="mw-cite-backlink"><a href="#cite_ref-Marche1_67-0">↑</a> </span><span class="reference-text"><a href="#Marche">Dimension économique et industrielle des cartes à puces</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;29</span>
</li>
<li id="cite_note-Marche2-68"><span class="mw-cite-backlink"><a href="#cite_ref-Marche2_68-0">↑</a> </span><span class="reference-text"><a href="#Marche">Dimension économique et industrielle des cartes à puces</a>, <abbr class="abbr" title="page(s)">p.</abbr>&nbsp;19</span>
</li>
</ol>
</div>
<div class="mw-heading mw-heading2"><h2 id="Bibliographie">Bibliographie</h2></div>
<ul><li><span class="ouvrage" id="Chen2000"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> Zhiqun <span class="nom_auteur">Chen</span>, <cite class="italique" lang="en">Java Card Technology for Smart Cards&nbsp;: Architecture and Programmer's Guide</cite>, <a href="Addison%E2%80%93Wesley" class="mw-redirect" title="Addison–Wesley">Addison Wesley</a>, <time class="nowrap" datetime="2000-09-18" data-sort-value="2000-09-18">18 septembre 2000</time> <small style="line-height:1em;">(<a rel="nofollow" class="external text" href="http://java.sun.com/developer/Books/consumerproducts/javacard/">lire en ligne</a>)</small><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Java+Card+Technology+for+Smart+Cards+%3A+Architecture+and+Programmer%27s+Guide&amp;rft.pub=Addison+Wesley&amp;rft.aulast=Chen&amp;rft.aufirst=Zhiqun&amp;rft.date=2000-09-18&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AJava+Card"></span></span></li>
<li><span class="ouvrage" id="Baentsch1999"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> M. <span class="nom_auteur">Baentsch</span>, P. <span class="nom_auteur">Buhler</span>, T. <span class="nom_auteur">Eirich</span>, F. <span class="nom_auteur">Horing</span> et M. <span class="nom_auteur">Oestreiche</span>, «&nbsp;<cite style="font-style:normal" lang="en">JavaCard-from hype to reality</cite>&nbsp;», <i><span class="lang-en" lang="en">IEEE Concurrency</span></i>, <abbr class="abbr" title="volume">vol.</abbr>&nbsp;7, <abbr class="abbr" title="numéro">n<sup>o</sup></abbr>&nbsp;4,‎ <time class="nowrap" datetime="1999" data-sort-value="1999">octobre-décembre 1999</time>, <abbr class="abbr" title="pages">p.</abbr>&nbsp;<span class="nowrap">36-43</span> <small style="line-height:1em;">(<a href="International_Standard_Serial_Number" title="International Standard Serial Number">ISSN</a>&nbsp;<span class=" noarchive"><a rel="nofollow" class="external text" href="https://portal.issn.org/resource/issn/1092-3063">1092-3063</a></span>, <a href="Digital_Object_Identifier" title="Digital Object Identifier">DOI</a>&nbsp;<span class=" noarchive nowrap"><a rel="nofollow" class="external text" href="https://dx.doi.org/10.1109/4434.806977">10.1109/4434.806977</a></span>)</small><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=article&amp;rft.atitle=JavaCard-from+hype+to+reality&amp;rft.jtitle=IEEE+Concurrency&amp;rft.issue=4&amp;rft.aulast=Baentsch&amp;rft.aufirst=M.&amp;rft.au=Buhler%2C+P.&amp;rft.au=Eirich%2C+T.&amp;rft.au=Horing%2C+F.&amp;rft.au=Oestreiche%2C+M.&amp;rft.date=1999&amp;rft.volume=7&amp;rft.pages=36-43&amp;rft.issn=1092-3063&amp;rft_id=info%3Adoi%2F10.1109%2F4434.806977&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AJava+Card"></span></span><div style="margin-left:2em; line-height:1.5;">Secure Syst. Group, IBM Res. Div. Zurich</div></li>
<li><span class="ouvrage" id="Casset2002"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> L. <span class="nom_auteur">Casset</span> et JL. <span class="nom_auteur">Lanet</span>, «&nbsp;<cite style="font-style:normal" lang="en">Increasing smart card dependability</cite>&nbsp;», <i><span class="lang-en" lang="en">ACM</span></i>,‎ <time>2002</time>, <abbr class="abbr" title="pages">p.</abbr>&nbsp;<span class="nowrap">209 - 212</span> <small style="line-height:1em;">(<a href="Digital_Object_Identifier" title="Digital Object Identifier">DOI</a>&nbsp;<span class=" noarchive nowrap"><a rel="nofollow" class="external text" href="https://dx.doi.org/10.1145/1133373.1133416">10.1145/1133373.1133416</a></span>)</small><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=article&amp;rft.atitle=Increasing+smart+card+dependability&amp;rft.jtitle=ACM&amp;rft.aulast=Casset&amp;rft.aufirst=L.&amp;rft.au=Lanet%2C+JL.&amp;rft.date=2002&amp;rft.pages=209+-+212&amp;rft_id=info%3Adoi%2F10.1145%2F1133373.1133416&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AJava+Card"></span></span><div style="margin-left:2em; line-height:1.5;">EW 10 Proceedings of the 10th workshop on ACM SIGOPS European workshop</div></li>
<li><span class="ouvrage" id="Hartel2001"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> P.H. <span class="nom_auteur">Hartel</span> et L. <span class="nom_auteur">Moreau</span>, «&nbsp;<cite style="font-style:normal" lang="en">Formalizing the safety of Java, the Java virtual machine, and Java card</cite>&nbsp;», <i><span class="lang-en" lang="en">ACM Computing Surveys (CSUR)</span></i>, <abbr class="abbr" title="volume">vol.</abbr>&nbsp;33, <abbr class="abbr" title="numéro">n<sup>o</sup></abbr>&nbsp;4,‎ <time>2001</time>, <abbr class="abbr" title="pages">p.</abbr>&nbsp;<span class="nowrap">517-558</span> <small style="line-height:1em;">(<a href="International_Standard_Serial_Number" title="International Standard Serial Number">ISSN</a>&nbsp;<span class=" noarchive"><a rel="nofollow" class="external text" href="https://portal.issn.org/resource/issn/0360-0300">0360-0300</a></span>, <a href="International_Standard_Serial_Number#ISSN_électronique" title="International Standard Serial Number">e-ISSN</a>&nbsp;<span class=" noarchive"><a rel="nofollow" class="external text" href="https://portal.issn.org/resource/issn/1557-7341">1557-7341</a></span>, <a href="Digital_Object_Identifier" title="Digital Object Identifier">DOI</a>&nbsp;<span class=" noarchive nowrap"><a rel="nofollow" class="external text" href="https://dx.doi.org/10.1145/503112.503115">10.1145/503112.503115</a></span>)</small><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=article&amp;rft.atitle=Formalizing+the+safety+of+Java%2C+the+Java+virtual+machine%2C+and+Java+card&amp;rft.jtitle=ACM+Computing+Surveys+%28CSUR%29&amp;rft.issue=4&amp;rft.aulast=Hartel&amp;rft.aufirst=P.H.&amp;rft.au=Moreau%2C+L.&amp;rft.date=2001&amp;rft.volume=33&amp;rft.pages=517-558&amp;rft.issn=0360-0300&amp;rft_id=info%3Adoi%2F10.1145%2F503112.503115&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AJava+Card"></span></span></li>
<li><span class="ouvrage" id="Ghindici"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> Dorina <span class="nom_auteur">Ghindici</span>, Gilles <span class="nom_auteur">Grimaud</span> et Isabelle <span class="nom_auteur">Simplot-Ryl</span>, «&nbsp;<cite style="font-style:normal" lang="en">Embedding verifiable information flow analysis</cite>&nbsp;», <i><span class="lang-en" lang="en">ACM Computing Surveys (CSUR)</span></i>,‎ <time>2006</time>, <abbr class="abbr" title="pages">p.</abbr>&nbsp;<span class="nowrap">1-9</span> <small style="line-height:1em;">(<a href="International_Standard_Book_Number" title="International Standard Book Number">ISBN</a>&nbsp;<span class="nowrap">1-59593-604-1</span>, <a href="Digital_Object_Identifier" title="Digital Object Identifier">DOI</a>&nbsp;<span class=" noarchive nowrap"><a rel="nofollow" class="external text" href="https://dx.doi.org/10.1145/1501434.1501481">10.1145/1501434.1501481</a></span>)</small><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=article&amp;rft.atitle=Embedding+verifiable+information+flow+analysis&amp;rft.jtitle=ACM+Computing+Surveys+%28CSUR%29&amp;rft.aulast=Ghindici&amp;rft.aufirst=Dorina&amp;rft.au=Grimaud%2C+Gilles&amp;rft.au=Simplot-Ryl%2C+Isabelle&amp;rft.date=2006&amp;rft.pages=1-9&amp;rft.isbn=1-59593-604-1&amp;rft_id=info%3Adoi%2F10.1145%2F1501434.1501481&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AJava+Card"></span></span></li>
<li><span class="ouvrage" id="Dufay">Guillaume <span class="nom_auteur">Dufay</span>, <cite class="italique">Vérification formelle de la plate-forme Java Card</cite>, <time>2003</time> <small style="line-height:1em;">(<a rel="nofollow" class="external text" href="http://www.irisa.fr/lande/gdufay/these-gdufay.pdf">lire en ligne</a>)</small><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=V%C3%A9rification+formelle+de+la+plate-forme+Java+Card&amp;rft.aulast=Dufay&amp;rft.aufirst=Guillaume&amp;rft.date=2003&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AJava+Card"></span></span></li>
<li><span class="ouvrage" id="SUN_API"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <cite class="italique" lang="en">Java Card™ 2.2 Application Programming Interface&nbsp;: Revision 1.1 for the 2.2_01 Release</cite>, 901 San Antonio Road Palo Alto, CA 94303 USA, Sun Microsystems, Inc, <time>2002</time>, 2.2_01&nbsp;<abbr class="abbr" title="édition">éd.</abbr>, 278&nbsp;<abbr class="abbr" title="pages">p.</abbr> <small style="line-height:1em;">(<a rel="nofollow" class="external text" href="http://java.sun.com/j2se/javadoc/mifdoclet/samples/JavaCard22API.pdf">lire en ligne</a>)</small><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Java+Card%E2%84%A2+2.2+Application+Programming+Interface&amp;rft.place=901+San+Antonio+Road+Palo+Alto%2C+CA+94303+USA&amp;rft.pub=Sun+Microsystems%2C+Inc&amp;rft.edition=2.2_01&amp;rft.stitle=Revision+1.1+for+the+2.2_01+Release&amp;rft.date=2002&amp;rft.tpages=278&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AJava+Card"></span></span></li>
<li><span class="ouvrage" id="SUN_PLATFORM"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <cite class="italique" lang="en">THE JAVA CARD™ 3 PLATFORM</cite>, 901 San Antonio Road Palo Alto, CA 94303 USA, Sun Microsystems, Inc, <time>2008</time>, 34&nbsp;<abbr class="abbr" title="pages">p.</abbr> <small style="line-height:1em;">(<a rel="nofollow" class="external text" href="http://java.sun.com/javacard/3.0/javacard3_whitepaper.pdf">lire en ligne</a>)</small><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=THE+JAVA+CARD%E2%84%A2+3+PLATFORM&amp;rft.place=901+San+Antonio+Road+Palo+Alto%2C+CA+94303+USA&amp;rft.pub=Sun+Microsystems%2C+Inc&amp;rft.date=2008&amp;rft.tpages=34&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AJava+Card"></span></span></li>
<li><span class="ouvrage" id="Gemalto_developper"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <span class="nom_auteur">Gemalto</span>, <cite class="italique" lang="en">Java Card™ &amp; STK Applet Development Guidelines&nbsp;: version 2</cite>, <time>2009</time>, WG.GGS.4.0042&nbsp;<abbr class="abbr" title="édition">éd.</abbr>, 53&nbsp;<abbr class="abbr" title="pages">p.</abbr> <small style="line-height:1em;">(<a rel="nofollow" class="external text" href="http://developer.gemalto.com/fileadmin/contrib/downloads/pdf/Java%20Card%20%26%20STK%20Applet%20Development%20Guidelines.pdf">lire en ligne</a>)</small><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Java+Card%E2%84%A2+%26+STK+Applet+Development+Guidelines&amp;rft.edition=WG.GGS.4.0042&amp;rft.stitle=version+2&amp;rft.aulast=Gemalto&amp;rft.date=2009&amp;rft.tpages=53&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AJava+Card"></span></span></li>
<li><span class="ouvrage" id="Oracle_OCV"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <span class="nom_auteur">Oracle</span>, <cite class="italique" lang="en">Java Card 2.2 Off-Card Verifier&nbsp;: version 2.2</cite>, 901 San Antonio Road Palo Alto, CA 94303 USA, <time>2002</time>, 24&nbsp;<abbr class="abbr" title="pages">p.</abbr> <small style="line-height:1em;">(<a rel="nofollow" class="external text" href="http://www.oracle.com/technetwork/java/javacard/offcardverifierwp-150021.pdf">lire en ligne</a>)</small><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Java+Card+2.2+Off-Card+Verifier&amp;rft.place=901+San+Antonio+Road+Palo+Alto%2C+CA+94303+USA&amp;rft.stitle=version+2.2&amp;rft.aulast=Oracle&amp;rft.date=2002&amp;rft.tpages=24&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AJava+Card"></span></span></li>
<li><span class="ouvrage" id="SUN_SERVLET"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <cite class="italique" lang="en">Java™ Servlet Specification&nbsp;: Java Card™ Platform, Version 3.0.1 Connected Edition</cite>, 901 San Antonio Road Palo Alto, CA 94303 USA, Sun Microsystems, Inc, <time>2009</time>, 162&nbsp;<abbr class="abbr" title="pages">p.</abbr><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Java%E2%84%A2+Servlet+Specification&amp;rft.place=901+San+Antonio+Road+Palo+Alto%2C+CA+94303+USA&amp;rft.pub=Sun+Microsystems%2C+Inc&amp;rft.stitle=Java+Card%E2%84%A2+Platform%2C+Version+3.0.1+Connected+Edition&amp;rft.date=2009&amp;rft.tpages=162&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AJava+Card"></span></span></li>
<li><span class="ouvrage" id="ISO7816-4"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <cite class="italique" lang="en">ISO7816-4 Cartes d'identification -- Cartes à circuit intégré&nbsp;: Partie 4&nbsp;: Organisation, sécurité et commandes pour les échanges</cite>, <time>2005</time>, <abbr class="abbr" title="deuxième">2<sup>e</sup></abbr>&nbsp;<abbr class="abbr" title="édition">éd.</abbr><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=ISO7816-4+Cartes+d%27identification+--+Cartes+%C3%A0+circuit+int%C3%A9gr%C3%A9&amp;rft.edition=2&amp;rft.stitle=Partie+4+%3A+Organisation%2C+s%C3%A9curit%C3%A9+et+commandes+pour+les+%C3%A9changes&amp;rft.date=2005&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AJava+Card"></span></span></li>
<li><span class="ouvrage" id="Marche"><cite class="italique">Dimension économique et industrielle des cartes à puces</cite>, www.industrie.gouv.fr, <time>2009</time>, <abbr class="abbr" title="première">1<sup>re</sup></abbr>&nbsp;<abbr class="abbr" title="édition">éd.</abbr> <small style="line-height:1em;">(<a rel="nofollow" class="external text" href="http://www.industrie.gouv.fr/p3e/etudes/cartes_puces/cartes_puces.pdf">lire en ligne</a>)</small>, <abbr class="abbr" title="page">p.</abbr>&nbsp;74<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Dimension+%C3%A9conomique+et+industrielle+des+cartes+%C3%A0+puces&amp;rft.pub=www.industrie.gouv.fr&amp;rft.edition=1&amp;rft.date=2009&amp;rft.pages=74&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AJava+Card"></span></span></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Voir_aussi">Voir aussi</h2></div>
<ul><li><a href="Syst%C3%A8me_d'exploitation_pour_carte_%C3%A0_puce" title="Système d'exploitation pour carte à puce">Système d'exploitation pour carte à puce</a></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Liens_externes">Liens externes</h3></div>
<ul><li><span class="ouvrage" id="JavaCard3.0.1"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> «&nbsp;<a rel="nofollow" class="external text" href="http://java.sun.com/javacard/3.0.1/specs.jsp"><cite style="font-style:normal;" lang="en">Spécifications de Java Card Version 3.0.1</cite></a>&nbsp;»</span></li>
<li><span class="ouvrage" id="Oracle"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> «&nbsp;<a rel="nofollow" class="external text" href="http://www.oracle.com/technetwork/java/javacard/overview/overview-jsp-135353.html"><cite style="font-style:normal;" lang="en">Oracle Javacard Overview</cite></a>&nbsp;»</span></li>
<li><span class="ouvrage" id="ISO7816"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> «&nbsp;<a rel="nofollow" class="external text" href="http://www.iso.org/iso/fr/search.htm?qt=7816&amp;searchSubmit=Rechercher&amp;sort=rel&amp;type=simple&amp;published=true"><cite style="font-style:normal;" lang="en">Organisation internationale de normalisation</cite></a>&nbsp;»</span></li>
<li><span class="ouvrage" id="Gemalto"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> «&nbsp;<a rel="nofollow" class="external text" href="http://developer.gemalto.com/home/technology/java-card.html"><cite style="font-style:normal;" lang="en">Gemalto Java Card™</cite></a>&nbsp;»</span></li>
<li><span class="ouvrage" id="oracle_spécifications"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> «&nbsp;<a rel="nofollow" class="external text" href="http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javame-419430.html#java_card_kit-3.0.1-rr-spec-oth-JPR"><cite style="font-style:normal;" lang="en">Oracle Java Card Spécifications</cite></a>&nbsp;»</span></li>
<li><span class="ouvrage" id="oracle_features"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> «&nbsp;<a rel="nofollow" class="external text" href="http://www.oracle.com/technetwork/java/javacard/releasenotes-jsp-137685.html#Classic_Features%20Java%20Card%20Release%20Note"><cite style="font-style:normal;" lang="en">Classic_Features Java Card Release Note</cite></a>&nbsp;»</span></li>
<li><span class="ouvrage" id="oracle_release2.2.2"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> «&nbsp;<a rel="nofollow" class="external text" href="http://www.oracle.com/technetwork/java/javacard/documentation/releasenotes-jcspecspw-2-2-2-142671.html"><cite style="font-style:normal;" lang="en">Oracle Java Card 2.2.2</cite></a>&nbsp;», <time class="nowrap" datetime="2006-03" data-sort-value="2006-03">mars 2006</time></span></li>
<li><span class="ouvrage" id="oracle_overview"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> «&nbsp;<a rel="nofollow" class="external text" href="http://www.oracle.com/technetwork/java/javame/javacard/overview/about/index.html"><cite style="font-style:normal;" lang="en">Oracle Java Card Industries</cite></a>&nbsp;»</span></li>
<li><span class="ouvrage" id="Sun_CLDC"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> «&nbsp;<a rel="nofollow" class="external text" href="http://java.sun.com/products/cldc/"><cite style="font-style:normal;" lang="en">Sun CLDC</cite></a>&nbsp;»</span></li>
<li><span class="ouvrage" id="Servlet_2_4"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> «&nbsp;<a rel="nofollow" class="external text" href="http://jcp.org/aboutJava/communityprocess/final/jsr154/index.html"><cite style="font-style:normal;" lang="en">Java Servlet V2.4</cite></a>&nbsp;»</span></li>
<li><span class="ouvrage" id="Type_Java"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> «&nbsp;<a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html"><cite style="font-style:normal;" lang="en">Type utilisé dans la programmation Java</cite></a>&nbsp;»</span></li>
<li><span class="ouvrage" id="StringBuilder"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> «&nbsp;<a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/StringBuilder.html"><cite style="font-style:normal;" lang="en">Classe StringBuilder</cite></a>&nbsp;»</span></li>
<li><span class="ouvrage" id="Generics"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> «&nbsp;<a rel="nofollow" class="external text" href="http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf"><cite style="font-style:normal;" lang="en">Types génériques du langage Java</cite></a>&nbsp;»</span></li>
<li><span class="ouvrage" id="Autoboxing"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> «&nbsp;<a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html"><cite style="font-style:normal;" lang="en">Autoboxing en Java</cite></a>&nbsp;»</span></li>
<li><span class="ouvrage" id="Enumération"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> «&nbsp;<a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Enumeration.html"><cite style="font-style:normal;" lang="en">Énumération du langage Java</cite></a>&nbsp;»</span></li>
<li><span class="ouvrage" id="Varargs"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> «&nbsp;<a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html"><cite style="font-style:normal;" lang="en">Méthodes à arguments multiples du langage Java</cite></a>&nbsp;»</span></li>
<li><span class="ouvrage" id="Static_Imports"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> «&nbsp;<a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/1.5.0/docs/guide/language/static-import.html"><cite style="font-style:normal;" lang="en">Import statique du langage Java</cite></a>&nbsp;»</span></li></ul>
<div class="navbox-container" style="clear:both;">

</div>
<ul id="bandeau-portail" class="bandeau-portail"><li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de l’informatique</span> </span></li> <li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de la programmation informatique</span> </span></li> </ul></div><!--htdig_noindex--><div><div class="zim-footer">
Cet article est issu de <a class="external text" title="Dernière modification le 2025-08-18" href="https://fr.wikipedia.org/wiki/?title=Java_Card&amp;oldid=228216629">Wikipédia</a>. Sauf mention contraire, le texte est disponible sous <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr">Creative Commons Attribution-Share Alike 4.0</a>. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>